#include #include #include #include #include #include struct bshell_alias_p { }; static void init(fx_object *obj, void *priv) { } enum bshell_status bshell_alias_get_callable_name( const bshell_alias *alias, fx_string *out) { bshell_alias_class *c = fx_object_get_interface(alias, BSHELL_TYPE_ALIAS); if (!c) { return BSHELL_ERR_NOT_SUPPORTED; } const char *callable_name = c->a_callable_name; if (c->a_get_callable_name) { callable_name = c->a_get_callable_name(alias); } if (callable_name) { fx_string_append_cstr(out, callable_name); } return BSHELL_SUCCESS; } enum bshell_status bshell_alias_get_target_name( const bshell_alias *alias, fx_string *out) { bshell_alias_class *c = fx_object_get_interface(alias, BSHELL_TYPE_ALIAS); if (!c) { return BSHELL_ERR_NOT_SUPPORTED; } const char *target_name = c->a_target_name; if (c->a_get_target_name) { target_name = c->a_get_target_name(alias); } if (target_name) { fx_string_append_cstr(out, target_name); } return BSHELL_SUCCESS; } static enum bshell_status get_callable_name_static( const fx_type *ty, fx_string *out) { bshell_alias_class *c = fx_type_get_interface(ty, BSHELL_TYPE_ALIAS); if (!c) { return BSHELL_ERR_NOT_SUPPORTED; } if (c->a_callable_name) { fx_string_append_cstr(out, c->a_callable_name); } return BSHELL_SUCCESS; } static enum bshell_status get_description( const bshell_command *cmd, fx_string *out) { bshell_alias_class *c = fx_object_get_interface(cmd, BSHELL_TYPE_ALIAS); if (!c) { return BSHELL_ERR_NOT_SUPPORTED; } const char *callable_name = c->a_callable_name; if (c->a_get_callable_name) { callable_name = c->a_get_callable_name(cmd); } const char *target_name = c->a_target_name; if (c->a_get_target_name) { target_name = c->a_get_target_name(cmd); } if (!callable_name || !target_name) { return BSHELL_ERR_NOT_SUPPORTED; } fx_string_append_cstr(out, callable_name); fx_string_append_cstr(out, " -> "); fx_string_append_cstr(out, target_name); return BSHELL_SUCCESS; } enum bshell_status get_description_static(const fx_type *ty, fx_string *out) { return BSHELL_SUCCESS; } FX_TYPE_CLASS_BEGIN(bshell_alias) FX_TYPE_VTABLE_INTERFACE_BEGIN(fx_object, FX_TYPE_OBJECT) FX_INTERFACE_ENTRY(to_string) = NULL; FX_TYPE_VTABLE_INTERFACE_END(fx_object, FX_TYPE_OBJECT) FX_TYPE_VTABLE_INTERFACE_BEGIN(bshell_command, BSHELL_TYPE_COMMAND) FX_INTERFACE_ENTRY(c_command_type) = "Alias"; FX_INTERFACE_ENTRY(c_get_callable_name) = bshell_alias_get_callable_name; FX_INTERFACE_ENTRY(c_get_callable_name_static) = get_callable_name_static; FX_INTERFACE_ENTRY(c_get_description) = get_description; FX_INTERFACE_ENTRY(c_get_description_static) = get_description_static; FX_TYPE_VTABLE_INTERFACE_END(bshell_command, BSHELL_TYPE_COMMAND) FX_TYPE_CLASS_END(bshell_alias) FX_TYPE_DEFINITION_BEGIN(bshell_alias) FX_TYPE_ID(0x1736c10e, 0xebe6, 0x4ba5, 0x83d9, 0x5da3b7dc706c); FX_TYPE_FLAGS(FX_TYPE_F_ABSTRACT); FX_TYPE_NAME("bshell.runtime.alias"); FX_TYPE_EXTENDS(BSHELL_TYPE_COMMAND); FX_TYPE_CLASS(bshell_alias_class); FX_TYPE_INSTANCE_INIT(init); FX_TYPE_INSTANCE_PRIVATE(struct bshell_alias_p); FX_TYPE_DEFINITION_END(bshell_alias)