kameloso.printing

Functions related to (formatting and) printing structs and classes to the local terminal, listing each member variable and their contents in an easy-to-visually-parse way.

Members

Aliases

formatObject
alias formatObject = formatObjects

Formats an aggregate object, with all its printable members with all their printable values. Overload that writes to a passed output range sink.

printObject
alias printObject = printObjects

Prints out aggregate objects, with all their printable members with all their printable values.

Functions

formatAggregateMemberImpl
void formatAggregateMemberImpl(Sink sink, FormatAggregateMemberArguments args)

Formats the description of an aggregate for insertion into a formatObjects listing.

formatArrayMemberImpl
void formatArrayMemberImpl(Sink sink, FormatArrayMemberArguments args, string[] content)

Formats the description of an array for insertion into a formatObjects listing.

formatAssociativeArrayMemberImpl
void formatAssociativeArrayMemberImpl(Sink sink, FormatArrayMemberArguments args, string[string] content)

Formats the description of an associative array for insertion into a formatObjects listing.

formatObjectImpl
void formatObjectImpl(Sink sink, Flag!"brightTerminal" bright, Thing thing, uint typewidth, uint namewidth)

Formats an aggregate object, with all its printable members with all their printable values. This is an implementation template and should not be called directly; instead use printObjects or formatObjects.

formatObjects
void formatObjects(Sink sink, Flag!"brightTerminal" bright, Things things)

Formats an aggregate object, with all its printable members with all their printable values. Overload that writes to a passed output range sink.

formatObjects
string formatObjects(Flag!"brightTerminal" bright, Things things)

Formats a struct object, with all its printable members with all their printable values. A string-returning overload that doesn't take an input range.

formatOtherMemberImpl
void formatOtherMemberImpl(Sink sink, FormatOtherMemberArguments args, T content)

Formats the description of a non-string, non-array, non-aggregate value for insertion into a formatObjects listing.

formatStringMemberImpl
void formatStringMemberImpl(Sink sink, FormatStringMemberArguments args, string content)

Formats the description of a string for insertion into a formatObjects listing. The full string is passed and the function will truncate it if it's too long.

printObjects
void printObjects(Things things)

Prints out aggregate objects, with all their printable members with all their printable values.

Structs

FormatAggregateMemberArguments
struct FormatAggregateMemberArguments

Argument aggregate for invocations of formatAggregateMemberImpl.

FormatArrayMemberArguments
struct FormatArrayMemberArguments

Argument aggregate for invocations of formatArrayMemberImpl.

FormatOtherMemberArguments
struct FormatOtherMemberArguments

Argument aggregate for invocations of formatOtherMemberImpl.

FormatStringMemberArguments
struct FormatStringMemberArguments

Argument aggregate for invocations of formatStringMemberImpl.

Templates

Widths
template Widths(Flag!"all" all, Things...)

Calculates the minimum padding needed to accommodate the strings of all the types and names of the members of the passed struct and/or classes, for formatting into neat columns.

Examples

printObjects(client, bot, settings);

/* Output to screen:

-- IRCClient
   string nickname               "kameloso"(8)
   string user                   "kameloso"(8)
   string ident                  "NaN"(3)
   string realName               "kameloso IRC bot"(16)

-- IRCBot
   string account                "kameloso"(8)
 string[] admins                 ["zorael"](1)
 string[] homeChannels           ["#flerrp"](1)
 string[] guestChannels          ["#d"](1)

-- IRCServer
   string address                "irc.libera.chat"(16)
   ushort port                    6667
*/

Distance between types, member names and member values are deduced automatically based on how long they are (in terms of characters). If it doesn't line up, its a bug.

See Also

Meta