pub struct MethodSchema {Show 16 fields
pub name: String,
pub description: String,
pub hash: String,
pub params: Option<Schema>,
pub returns: Option<Schema>,
pub streaming: bool,
pub bidirectional: bool,
pub http_method: HttpMethod,
pub request_type: Option<Schema>,
pub response_type: Option<Schema>,
pub role: MethodRole,
pub deprecation: Option<DeprecationInfo>,
pub return_shape: Option<ReturnShape>,
pub params_meta: Vec<ParamSchema>,
pub credentials: Vec<CredentialFieldDecl>,
pub requires_credential: Option<RequiredCredential>,
}Expand description
Schema for a single method exposed by a plugin
Fields§
§name: StringMethod name (e.g., “echo”, “check”)
description: StringHuman-readable description of what this method does
hash: StringContent hash of the method definition (for cache invalidation) Generated by hashing the method signature within hub-macro
params: Option<Schema>JSON Schema for the method’s parameters (None if no params)
returns: Option<Schema>JSON Schema for the method’s return type (None if not specified)
streaming: boolWhether this method streams multiple events (true) or returns a single result (false)
streaming: true→ returnsAsyncGenerator<T>(multiple events)streaming: false→ returnsPromise<T>(single event, collected)
All methods use the same streaming protocol under the hood, but this flag tells clients how to present the result.
bidirectional: boolWhether this method supports bidirectional communication
When true, the server can send requests to the client during method execution and wait for responses (e.g., confirmations, prompts, selections).
http_method: HttpMethodHTTP method for REST endpoints (GET, POST, PUT, DELETE, PATCH)
This field is used by the HTTP gateway to determine which HTTP method to use when exposing this method as a REST endpoint. Defaults to POST for backward compatibility.
- GET: Idempotent read operations (no side effects)
- POST: Create operations or non-idempotent actions (default)
- PUT: Replace/update operations (idempotent)
- DELETE: Remove operations (idempotent)
- PATCH: Partial update operations
request_type: Option<Schema>JSON Schema for the request type sent from server to client
Only relevant when bidirectional: true. Describes the structure of
requests the server may send during method execution.
response_type: Option<Schema>JSON Schema for the response type sent from client to server
Only relevant when bidirectional: true. Describes the structure of
responses the client should send in reply to server requests.
role: MethodRoleHow this method participates in the activation graph.
Added in IR-2. Defaults to MethodRole::Rpc via #[serde(default)]
so pre-IR schemas deserialize cleanly.
Populated by the #[plexus::method] / #[child] macros (IR-3).
deprecation: Option<DeprecationInfo>If set, this method is deprecated.
Added in IR-2. Defaults to None via #[serde(default)] so pre-IR
schemas deserialize cleanly.
Populated by the #[deprecated(...)] attribute on the underlying
method (IR-5).
return_shape: Option<ReturnShape>Structural shape of the method’s return type (e.g., Option, Vec,
Stream).
Orthogonal to returns, which holds the fine-grained JSON Schema of
the inner type. Added in IR-2 as an optional, additive field. None
means “not populated” (the wire format supports pre-IR schemas that
omit this field entirely).
params_meta: Vec<ParamSchema>Per-parameter metadata (currently just deprecation).
Added in IR-5. Defaults to an empty vec via #[serde(default)] so
pre-IR schemas deserialize cleanly. Only parameters that carry
metadata appear in this list — absence means “no metadata” for that
parameter, not a bug.
Populated by the #[deprecated(...)] attribute on individual
parameters (IR-5).
credentials: Vec<CredentialFieldDecl>Credential-bearing fields in this method’s return type.
One entry per #[plexus::credential(...)]-annotated field on the
return-type struct/enum, in stable declaration order. Empty when
the return type contains no credentials.
Added in AUTHZ-CRED-CORE-3. Defaults to an empty vec via
#[serde(default)] so pre-IR schemas deserialize cleanly. The
skip_serializing_if = "Vec::is_empty" clause keeps the wire JSON
shape unchanged for methods with no credential-bearing fields
(back-compat per the ticket’s “Wire-format back-compat” table).
Populated at schema-build time from the CredentialFieldMarker
registry emitted by #[derive(Credentials)] (AUTHZ-CRED-MACRO-1).
requires_credential: Option<RequiredCredential>What credential this method requires on input (if any).
Derived implicitly from the method’s scope tagging and the
credential-graph linkage at schema-build time (per
AUTHZ-CRED-CORE-3 §“Implicit derivation”):
scope = "..."→RequiredCredential::from_method_scope(scope).publicmethod →None(the absence of this field).- target of
refresh_via/revoke_viaof another credential →RequiredCredential::from_refresh_revoke_target(kind, scopes).
Added in AUTHZ-CRED-CORE-3. Defaults to None via
#[serde(default)] so pre-IR schemas deserialize cleanly. The
skip_serializing_if = "Option::is_none" clause keeps the wire JSON
shape unchanged for public methods and methods with no scope-derived
requirement.
Implementations§
Source§impl MethodSchema
impl MethodSchema
Sourcepub fn new(
name: impl Into<String>,
description: impl Into<String>,
hash: impl Into<String>,
) -> Self
pub fn new( name: impl Into<String>, description: impl Into<String>, hash: impl Into<String>, ) -> Self
Create a new method schema with name, description, and hash
The hash should be computed from the method definition string within the hub-macro at compile time.
Sourcepub fn with_params(self, params: Schema) -> Self
pub fn with_params(self, params: Schema) -> Self
Add parameter schema
Sourcepub fn with_returns(self, returns: Schema) -> Self
pub fn with_returns(self, returns: Schema) -> Self
Add return type schema
Sourcepub fn with_streaming(self, streaming: bool) -> Self
pub fn with_streaming(self, streaming: bool) -> Self
Set the streaming flag
true→ method streams multiple events (useAsyncGenerator<T>)false→ method returns single result (usePromise<T>)
Sourcepub fn with_http_method(self, http_method: HttpMethod) -> Self
pub fn with_http_method(self, http_method: HttpMethod) -> Self
Set the HTTP method for REST endpoints
Defaults to POST for backward compatibility.
§Guidelines
- GET: Idempotent read operations with no side effects
- POST: Create operations or non-idempotent actions
- PUT: Replace/update operations (idempotent)
- DELETE: Remove operations (idempotent)
- PATCH: Partial update operations
Sourcepub fn with_bidirectional(self, bidirectional: bool) -> Self
pub fn with_bidirectional(self, bidirectional: bool) -> Self
Set whether this method supports bidirectional communication
When true, the server can send requests to the client during method execution and wait for responses.
Sourcepub fn with_request_type(self, schema: Schema) -> Self
pub fn with_request_type(self, schema: Schema) -> Self
Set the JSON Schema for server-to-client request types
Only relevant when bidirectional: true. Use schema_for!(YourRequestType)
to generate the schema.
Sourcepub fn with_response_type(self, schema: Schema) -> Self
pub fn with_response_type(self, schema: Schema) -> Self
Set the JSON Schema for client-to-server response types
Only relevant when bidirectional: true. Use schema_for!(YourResponseType)
to generate the schema.
Sourcepub fn with_standard_bidirectional(self) -> Self
pub fn with_standard_bidirectional(self) -> Self
Configure method for standard bidirectional communication
Sets bidirectional: true and configures request/response types to use
StandardRequest and StandardResponse, which support common UI patterns
like confirmations, prompts, and selections.
Sourcepub fn with_role(self, role: MethodRole) -> Self
pub fn with_role(self, role: MethodRole) -> Self
Set this method’s role in the activation graph.
Added in IR-2. Defaults to MethodRole::Rpc.
Sourcepub fn with_deprecation(self, info: DeprecationInfo) -> Self
pub fn with_deprecation(self, info: DeprecationInfo) -> Self
Mark this method as deprecated.
Added in IR-2. Populates the deprecation field with the provided
DeprecationInfo.
Sourcepub fn with_return_shape(self, shape: ReturnShape) -> Self
pub fn with_return_shape(self, shape: ReturnShape) -> Self
Set the structural shape of this method’s return type.
Added in IR-2. Orthogonal to with_returns, which sets the fine-grained
JSON Schema.
Sourcepub fn with_params_meta(self, entries: Vec<ParamSchema>) -> Self
pub fn with_params_meta(self, entries: Vec<ParamSchema>) -> Self
Attach per-parameter metadata for this method’s parameters.
Added in IR-5. Only parameters that carry metadata (e.g. a
#[deprecated] annotation) need appear in entries; absence means
“no metadata” for a given parameter. The consumer correlates entries
against self.params by matching ParamSchema.name against the
properties map of the JSON Schema.
Sourcepub fn with_credentials(self, credentials: Vec<CredentialFieldDecl>) -> Self
pub fn with_credentials(self, credentials: Vec<CredentialFieldDecl>) -> Self
Attach the credential-field projection for this method’s return type.
Added in AUTHZ-CRED-CORE-3. The build-path supplies one
CredentialFieldDecl per #[plexus::credential(...)]-annotated
field in the return type, in stable declaration order. Absence (the
default empty vec) means the return type carries no credentials.
The constructor CredentialFieldDecl::from_marker composes one
entry from a CredentialFieldMarker (emitted by the
#[derive(Credentials)] macro) plus the runtime-known issuer.
Sourcepub fn with_requires_credential(self, req: RequiredCredential) -> Self
pub fn with_requires_credential(self, req: RequiredCredential) -> Self
Attach the implicit-derived requires_credential filter for this
method.
Added in AUTHZ-CRED-CORE-3. The build-path supplies a
RequiredCredential derived from either (a) the method’s scope
attribute or (b) the method’s appearance as a refresh_via /
revoke_via target of some other credential in the schema. Public
methods leave this field as None (the default).
RequiredCredential::from_method_scope and
RequiredCredential::from_refresh_revoke_target are the two derivation
entry points.
Trait Implementations§
Source§impl Clone for MethodSchema
impl Clone for MethodSchema
Source§fn clone(&self) -> MethodSchema
fn clone(&self) -> MethodSchema
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MethodSchema
impl Debug for MethodSchema
Source§impl<'de> Deserialize<'de> for MethodSchema
impl<'de> Deserialize<'de> for MethodSchema
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for MethodSchema
impl JsonSchema for MethodSchema
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 more