pub struct PluginV1<P>where
P: GtsSchema,{
pub id: GtsInstanceId,
pub vendor: String,
pub priority: i16,
pub properties: P,
}Expand description
Base Type Schema for all toolkit plugin instances.
Plugins of any kind (resolvers, gateways, policy engines, etc.) register a
well-known GTS Instance of this type in types-registry. The properties
generic holds the plugin-kind-specific spec type (derived from this base
via GTS type chaining).
GTS Type Identifier: gts.cf.toolkit.plugins.plugin.v1~
Fields§
§id: GtsInstanceIdFull GTS Instance Identifier for this plugin instance.
vendor: StringVendor name, used for plugin selection when multiple of the same kind are registered.
priority: i16Selection priority — lower = higher priority.
properties: PPlugin-kind-specific spec (derived type’s properties).
Implementations§
Source§impl<P> PluginV1<P>where
P: GtsSchema + JsonSchema,
impl<P> PluginV1<P>where
P: GtsSchema + JsonSchema,
Sourcepub fn gts_type_id() -> &'static GtsTypeId
pub fn gts_type_id() -> &'static GtsTypeId
Get the GTS type identifier as a static reference.
Sourcepub fn gts_schema_id() -> &'static GtsTypeId
👎Deprecated since 0.10.0: renamed to gts_type_id
pub fn gts_schema_id() -> &'static GtsTypeId
renamed to gts_type_id
Deprecated alias for Self::gts_type_id.
Sourcepub fn gts_base_type_id() -> Option<&'static GtsTypeId>
pub fn gts_base_type_id() -> Option<&'static GtsTypeId>
Get the parent (base) type identifier as a static reference.
Returns None for base structs (those with base = true).
Sourcepub fn gts_base_schema_id() -> Option<&'static GtsTypeId>
👎Deprecated since 0.10.0: renamed to gts_base_type_id
pub fn gts_base_schema_id() -> Option<&'static GtsTypeId>
renamed to gts_base_type_id
Deprecated alias for Self::gts_base_type_id.
Sourcepub fn gts_make_instance_id(segment: &str) -> GtsInstanceId
pub fn gts_make_instance_id(segment: &str) -> GtsInstanceId
Generate a GTS instance ID by appending a segment to the type ID.
Source§impl<P> PluginV1<P>where
P: GtsSchema + JsonSchema,
impl<P> PluginV1<P>where
P: GtsSchema + JsonSchema,
Sourcepub fn gts_schema_with_refs_as_string() -> String
pub fn gts_schema_with_refs_as_string() -> String
Get the JSON Schema with allOf + $ref for inheritance as a JSON string.
Sourcepub fn gts_schema_with_refs_as_string_pretty() -> String
pub fn gts_schema_with_refs_as_string_pretty() -> String
Get the JSON Schema with allOf + $ref for inheritance as a pretty-printed JSON string.
Source§impl<P> PluginV1<P>where
P: GtsSchema + GtsSerialize,
impl<P> PluginV1<P>where
P: GtsSchema + GtsSerialize,
Sourcepub fn gts_instance_json(&self) -> Value
pub fn gts_instance_json(&self) -> Value
Serialize this instance to a serde_json::Value.
Sourcepub fn gts_instance_json_as_string(&self) -> String
pub fn gts_instance_json_as_string(&self) -> String
Serialize this instance to a JSON string.
Sourcepub fn gts_instance_json_as_string_pretty(&self) -> String
pub fn gts_instance_json_as_string_pretty(&self) -> String
Serialize this instance to a pretty-printed JSON string.
Source§impl<P> PluginV1<P>
impl<P> PluginV1<P>
Sourcepub fn build_registration(
instance_segment: &str,
vendor: impl Into<String>,
priority: i16,
) -> Result<(GtsInstanceId, Value), Error>
pub fn build_registration( instance_segment: &str, vendor: impl Into<String>, priority: i16, ) -> Result<(GtsInstanceId, Value), Error>
Assembles a PluginV1<P> from runtime config and returns the pair
(instance_id, json_payload) ready for scoped-client registration
and TypesRegistryClient::register(...).
P is constructed internally via P::default(). Derived unit-struct
plugin specs declared through #[toolkit_gts::gts_type_schema(base = PluginV1, ...)]
must #[derive(Default)] so the caller only specifies the type
once — in the turbofish.
Typical usage in a plugin gear’s init():
let (instance_id, payload) = PluginV1::<MyPluginSpecV1>::build_registration(
"<vendor>.<package>.<plugin_name>.v1", // instance segment
cfg.vendor, // from YAML
cfg.priority, // from YAML
)?;
// Publish to types-registry:
let results = registry.register(vec![payload]).await?;
RegisterResult::ensure_all_ok(&results)?;
// Register scoped client under the same instance id:
ctx.client_hub().register_scoped::<dyn MyPluginClient>(
ClientScope::gts_id(&instance_id),
api,
);The final instance id is P::SCHEMA_ID + instance_segment (e.g.
gts.cf.toolkit.plugins.plugin.v1~cf.core.authn_resolver.plugin.v1~cf.builtin.static_authn_resolver.plugin.v1).
Registration via types-registry-sdk stays in the caller — this
helper only builds the payload.
For plugin specs that carry real data in P (rare — most specs
are unit-struct markers), bypass this helper and construct
PluginV1 { id, vendor, priority, properties } manually.
§Errors
Returns a serde_json::Error if serialisation fails (should not
happen for well-formed derived specs produced by
#[struct_to_gts_schema(base = PluginV1, ...)]).
Trait Implementations§
Source§impl<'de, P> Deserialize<'de> for PluginV1<P>where
P: GtsSchema + GtsDeserialize<'de>,
impl<'de, P> Deserialize<'de> for PluginV1<P>where
P: GtsSchema + GtsDeserialize<'de>,
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<PluginV1<P>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<PluginV1<P>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl<P> GtsSchema for PluginV1<P>where
P: GtsSchema + JsonSchema,
impl<P> GtsSchema for PluginV1<P>where
P: GtsSchema + JsonSchema,
Source§const TYPE_ID: &'static str = "gts.cf.toolkit.plugins.plugin.v1~"
const TYPE_ID: &'static str = "gts.cf.toolkit.plugins.plugin.v1~"
SCHEMA_ID).Source§const GENERIC_FIELD: Option<&'static str>
const GENERIC_FIELD: Option<&'static str>
BaseEventV1<P> has payload as the generic field.Source§const GTS_FINAL: bool = false
const GTS_FINAL: bool = false
true if this type declares x-gts-final (not inheritable). Set by
#[struct_to_gts_schema] from gts_final = true; read by the
derive-from-final compile-time guard.Source§const GTS_ABSTRACT: bool = false
const GTS_ABSTRACT: bool = false
true if this type declares x-gts-abstract (not directly
instantiable). Set by #[struct_to_gts_schema] from gts_abstract = true; read by the gts_instance! compile-time guard.Source§const TRAIT_SCHEMA: TraitSchemaState
const TRAIT_SCHEMA: TraitSchemaState
x-gts-traits-schema state (this type’s own layer
allOf-composed with its ancestors’). Set by #[struct_to_gts_schema];
read by the compile-time guard that rejects traits values when the
chain has no usable trait shape (TraitSchemaState::Absent) or
prohibits traits (TraitSchemaState::Prohibited).Source§fn gts_schema_with_refs() -> Value
fn gts_schema_with_refs() -> Value
Source§fn gts_traits_schema() -> Option<Value>
fn gts_traits_schema() -> Option<Value>
x-gts-traits-schema, or None if it
declares none. The single layer this type contributes — not the
chain-aggregated effective trait-schema (the registry composes those
along the $id chain via allOf). Overridden by
#[struct_to_gts_schema] when traits_schema = … is set.Source§fn gts_traits() -> Option<Value>
fn gts_traits() -> Option<Value>
x-gts-traits values, or None if it
resolves none. The single layer this type contributes — not the
chain-merged effective traits object. Overridden by
#[struct_to_gts_schema] when traits = … is set.Source§fn gts_schema() -> Value
fn gts_schema() -> Value
GtsSchema,
this returns the schema with the generic field’s type replaced
by the nested type’s schema.Source§fn innermost_type_id() -> &'static str
fn innermost_type_id() -> &'static str
BaseEventV1<AuditPayloadV1<PlaceOrderDataV1>>, returns PlaceOrderDataV1’s ID.Source§fn innermost_schema() -> Value
fn innermost_schema() -> Value
BaseEventV1<AuditPayloadV1<PlaceOrderDataV1>>, returns PlaceOrderDataV1’s schema.Source§fn collect_nesting_path() -> Vec<&'static str>
fn collect_nesting_path() -> Vec<&'static str>
BaseEventV1<AuditPayloadV1<PlaceOrderDataV1>>, returns ["payload", "data"].Source§fn gts_schema_with_refs_allof() -> Value
fn gts_schema_with_refs_allof() -> Value
Source§const SCHEMA_ID: &'static str = Self::TYPE_ID
const SCHEMA_ID: &'static str = Self::TYPE_ID
use TYPE_ID instead
Self::TYPE_ID. Read moreSource§fn innermost_schema_id() -> &'static str
fn innermost_schema_id() -> &'static str
renamed to innermost_type_id
Self::innermost_type_id.Source§fn outer_generic_path() -> Vec<&'static str>
fn outer_generic_path() -> Vec<&'static str>
Source§fn wrap_in_nesting_path(
path: &[&str],
properties: Value,
required: Value,
generic_field: Option<&str>,
) -> Value
fn wrap_in_nesting_path( path: &[&str], properties: Value, required: Value, generic_field: Option<&str>, ) -> Value
["payload", "data"] and properties {order_id, product_id, last},
returns { "payload": { "type": "object", "properties": { "data": { "type": "object", "additionalProperties": false, "properties": {...}, "required": [...] } } } } Read moreSource§impl<P> JsonSchema for PluginV1<P>where
P: GtsSchema + JsonSchema,
impl<P> JsonSchema for PluginV1<P>where
P: GtsSchema + JsonSchema,
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl<P> Serialize for PluginV1<P>where
P: GtsSchema + GtsSerialize,
impl<P> Serialize for PluginV1<P>where
P: GtsSchema + GtsSerialize,
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl<P> Freeze for PluginV1<P>where
P: Freeze,
impl<P> RefUnwindSafe for PluginV1<P>where
P: RefUnwindSafe,
impl<P> Send for PluginV1<P>where
P: Send,
impl<P> Sync for PluginV1<P>where
P: Sync,
impl<P> Unpin for PluginV1<P>where
P: Unpin,
impl<P> UnsafeUnpin for PluginV1<P>where
P: UnsafeUnpin,
impl<P> UnwindSafe for PluginV1<P>where
P: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<'de, T> GtsDeserialize<'de> for Twhere
T: Deserialize<'de>,
impl<'de, T> GtsDeserialize<'de> for Twhere
T: Deserialize<'de>,
Source§fn gts_deserialize<__D>(
deserializer: __D,
) -> Result<T, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn gts_deserialize<__D>(
deserializer: __D,
) -> Result<T, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl<T> GtsSerialize for Twhere
T: Serialize,
impl<T> GtsSerialize for Twhere
T: Serialize,
Source§fn gts_serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn gts_serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> WithSecurityContext for T
impl<T> WithSecurityContext for T
Source§fn security_ctx<'a>(&'a self, ctx: &'a SecurityContext) -> Secured<'a, T>where
T: Sized,
fn security_ctx<'a>(&'a self, ctx: &'a SecurityContext) -> Secured<'a, T>where
T: Sized,
Secured wrapper. Read more