String format macros for ZZ
Add this to your zz.toml file:
[dependencies]
format = "*"
[repos]
format = "git://github.com/zzmodules/format"using formatCreates a formatted string from a variety of special tokens with traditional
printf style specifiers supported.
{}- Treats argument like a struct, calling.display()for achar *{*}- Treats argument like a pointer to a struct, calling->display()for achar *{0..9}- References argument by position. Treatment is the same as{}{*0..9}- References pointer argument by position. Treatment is same as{*}{$0..9}- References argument identifier name by position and uses it inline{0..9%X}- References argument by position with format. Treatment is like a limitedprintf
The @format::with() macro will treat struct and struct pointers specified
with {}, {*}, and its variant as special input that should implement a
displayable interface. Structs should simply implement a
display() -> char * method like in the example below:
using format
using log
using string
struct Vector {
float x;
float y;
}
fn display(Vector *self) -> char * {
new+64000 out = string::make();
out.format("Vector { x: %0.2f, y: %0.2f }", self->x, self->y);
return out.cstr();
}
fn main() -> {
let vec = Vector { x: 1.23, y: 2.46 };
log::info("%s", @format::with("{}", vec)); // Vector { x: 1.23, y: 2.46 }
return 0;
}MIT