tag signedness { signed; unsigned; } tag caseness { case_upper; case_lower; } tag ty { ty_bool; ty_str; ty_char; ty_int(signedness); ty_bits; ty_hex(caseness); // FIXME: More types } tag flag { flag_left_justify; flag_left_zero_pad; flag_left_space_pad; flag_plus_if_positive; flag_alternate; } tag count { count_is(int); count_is_param(int); count_is_next_param; count_implied; } // A formatted conversion from an expression to a string type conv = rec(option.t[int] param, vec[flag] flags, count width, count precision, ty ty); // A fragment of the output sequence tag piece { piece_string(str); piece_conv(conv); }