X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fcommands_parser.h;h=6e531e9bd43985d13476e1d47ffc98f6634df6b8;hb=a1aa8786266a791c9dd69437f1e848d6c0956950;hp=059237fd3c8f2a7b30abddd446a05f8fba804ad8;hpb=00cf2b21daa5bd5973f52cb1ac7a3852bf69f7cc;p=i3%2Fi3 diff --git a/include/commands_parser.h b/include/commands_parser.h index 059237fd..6e531e9b 100644 --- a/include/commands_parser.h +++ b/include/commands_parser.h @@ -12,16 +12,12 @@ #include /* - * Holds the result of a call to any command. When calling - * parse_command("floating enable, border none"), the parser will internally - * use a struct CommandResult when calling cmd_floating and cmd_border. - * parse_command will also return another struct CommandResult, whose - * json_output is set to a map of individual json_outputs and whose - * needs_tree_trender is true if any individual needs_tree_render was true. - * + * Holds an intermediate represenation of the result of a call to any command. + * When calling parse_command("floating enable, border none"), the parser will + * internally use this struct when calling cmd_floating and cmd_border. */ -struct CommandResult { - /* The JSON generator to append a reply to. */ +struct CommandResultIR { + /* The JSON generator to append a reply to (may be NULL). */ yajl_gen json_gen; /* The next state to transition to. Passed to the function so that we can @@ -33,4 +29,31 @@ struct CommandResult { bool needs_tree_render; }; -struct CommandResult *parse_command(const char *input); +typedef struct CommandResult CommandResult; + +/** + * A struct that contains useful information about the result of a command as a + * whole (e.g. a compound command like "floating enable, border none"). + * needs_tree_render is true if needs_tree_render of any individual command was + * true. + */ +struct CommandResult { + bool parse_error; + /* the error_message is currently only set for parse errors */ + char *error_message; + bool needs_tree_render; +}; + +/** + * Parses and executes the given command. If a caller-allocated yajl_gen is + * passed, a json reply will be generated in the format specified by the ipc + * protocol. Pass NULL if no json reply is required. + * + * Free the returned CommandResult with command_result_free(). + */ +CommandResult *parse_command(const char *input, yajl_gen gen); + +/** + * Frees a CommandResult + */ +void command_result_free(CommandResult *result);