Trait MakeOpDef

Source
pub trait MakeOpDef {
    // Required methods
    fn opdef_id(&self) -> OpName;
    fn from_def(op_def: &OpDef) -> Result<Self, OpLoadError>
       where Self: Sized;
    fn extension(&self) -> ExtensionId;
    fn extension_ref(&self) -> Weak<Extension>;
    fn init_signature(&self, extension_ref: &Weak<Extension>) -> SignatureFunc;

    // Provided methods
    fn signature(&self) -> SignatureFunc { ... }
    fn description(&self) -> String { ... }
    fn post_opdef(&self, _def: &mut OpDef) { ... }
    fn add_to_extension(
        &self,
        extension: &mut Extension,
        extension_ref: &Weak<Extension>,
    ) -> Result<(), ExtensionBuildError> { ... }
    fn load_all_ops(
        extension: &mut Extension,
        extension_ref: &Weak<Extension>,
    ) -> Result<(), ExtensionBuildError>
       where Self: IntoEnumIterator { ... }
    fn from_op(ext_op: &ExtensionOp) -> Result<Self, OpLoadError>
       where Self: Sized + FromStr { ... }
}
Expand description

Traits implemented by types which can add themselves to Extensions as OpDefs or load themselves from an OpDef.

Particularly useful with C-style enums that implement strum::IntoEnumIterator, as then all definitions can be added to an extension at once.

MakeExtensionOp has a blanket impl for types that impl MakeOpDef.

Required Methods§

Source

fn opdef_id(&self) -> OpName

The OpDef::name which will be used when Self is added to an Extension or when Self is loaded from an OpDef.

This identifer must be unique within the extension with which the OpDef is registered. An ExtensionOp instantiating this OpDef will report self.opdef_id() as its ExtensionOp::unqualified_id.

MakeExtensionOp::op_id must match this function.

Source

fn from_def(op_def: &OpDef) -> Result<Self, OpLoadError>
where Self: Sized,

Try to load one of the operations of this set from an OpDef.

Source

fn extension(&self) -> ExtensionId

The ID of the extension this operation is defined in.

Source

fn extension_ref(&self) -> Weak<Extension>

Returns a weak reference to the extension this operation is defined in.

Source

fn init_signature(&self, extension_ref: &Weak<Extension>) -> SignatureFunc

Compute the signature of the operation while the extension definition is being built.

Requires a Weak reference to the extension defining the operation. This method is intended to be used inside the closure passed to Extension::new_arc, and it is normally internally called by MakeOpDef::add_to_extension.

Provided Methods§

Source

fn signature(&self) -> SignatureFunc

Return the signature (polymorphic function type) of the operation.

Source

fn description(&self) -> String

Description of the operation. By default, the same as self.opdef_id().

Source

fn post_opdef(&self, _def: &mut OpDef)

Edit the opdef before finalising. By default does nothing.

Source

fn add_to_extension( &self, extension: &mut Extension, extension_ref: &Weak<Extension>, ) -> Result<(), ExtensionBuildError>

Add an operation implemented as an MakeOpDef, which can provide the data required to define an OpDef, to an extension.

Requires a Weak reference to the extension defining the operation. This method is intended to be used inside the closure passed to Extension::new_arc.

Source

fn load_all_ops( extension: &mut Extension, extension_ref: &Weak<Extension>, ) -> Result<(), ExtensionBuildError>
where Self: IntoEnumIterator,

Load all variants of an enum of op definitions in to an extension as op defs. See strum::IntoEnumIterator.

Requires a Weak reference to the extension defining the operation. This method is intended to be used inside the closure passed to Extension::new_arc.

Source

fn from_op(ext_op: &ExtensionOp) -> Result<Self, OpLoadError>
where Self: Sized + FromStr,

If the definition can be loaded from a string, load from an ExtensionOp.

Implementors§