Skip to main content

MethodSchema

Struct MethodSchema 

Source
pub struct MethodSchema {
    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>,
}
Expand description

Schema for a single method exposed by a plugin

Fields§

§name: String

Method name (e.g., “echo”, “check”)

§description: String

Human-readable description of what this method does

§hash: String

Content 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: bool

Whether this method streams multiple events (true) or returns a single result (false)

  • streaming: true → returns AsyncGenerator<T> (multiple events)
  • streaming: false → returns Promise<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: bool

Whether 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: HttpMethod

HTTP 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.

Implementations§

Source§

impl MethodSchema

Source

pub fn new( name: impl Into<String>, description: impl Into<String>, hash: impl Into<String>, ) -> MethodSchema

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.

Source

pub fn with_params(self, params: Schema) -> MethodSchema

Add parameter schema

Source

pub fn with_returns(self, returns: Schema) -> MethodSchema

Add return type schema

Source

pub fn with_streaming(self, streaming: bool) -> MethodSchema

Set the streaming flag

  • true → method streams multiple events (use AsyncGenerator<T>)
  • false → method returns single result (use Promise<T>)
Source

pub fn with_http_method(self, http_method: HttpMethod) -> MethodSchema

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
Source

pub fn with_bidirectional(self, bidirectional: bool) -> MethodSchema

Set whether this method supports bidirectional communication

When true, the server can send requests to the client during method execution and wait for responses.

Source

pub fn with_request_type(self, schema: Schema) -> MethodSchema

Set the JSON Schema for server-to-client request types

Only relevant when bidirectional: true. Use schema_for!(YourRequestType) to generate the schema.

Source

pub fn with_response_type(self, schema: Schema) -> MethodSchema

Set the JSON Schema for client-to-server response types

Only relevant when bidirectional: true. Use schema_for!(YourResponseType) to generate the schema.

Source

pub fn with_standard_bidirectional(self) -> MethodSchema

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.

Trait Implementations§

Source§

impl Clone for MethodSchema

Source§

fn clone(&self) -> MethodSchema

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MethodSchema

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for MethodSchema

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<MethodSchema, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl JsonSchema for MethodSchema

Source§

fn schema_name() -> Cow<'static, str>

The name of the generated JSON Schema. Read more
Source§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
Source§

fn inline_schema() -> bool

Whether JSON Schemas generated for this type should be included directly in parent schemas, rather than being re-used where possible using the $ref keyword. Read more
Source§

impl Serialize for MethodSchema

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> MaybeSend for T
where T: Send,