Enum Function

Source
pub enum Function {
    Known(u64, Option<FunctionName>),
    Named(FunctionName),
}
Expand description

A function identifier used in Gordian Envelope expressions.

In Gordian Envelope, a function appears as the subject of an expression envelope, with its parameters as assertions on that envelope.

Functions can be identified in two ways:

  1. By a numeric ID (for well-known functions)
  2. By a string name (for application-specific or less common functions)

When encoded in CBOR, functions are tagged with #6.40006.

§Examples

A numeric function:

use bc_envelope::prelude::*;

// Define a function with a numeric ID
let add_function = Function::new_known(1, Some("add".to_string()));

A named function:

use bc_envelope::prelude::*;

// Define a function with a string name
let verify_function = Function::new_named("verifySignature");

A function with static name:

use bc_envelope::prelude::*;

// Define a function with a numeric ID and static name
const ADD: Function = Function::new_with_static_name(1, "add");

Variants§

§

Known(u64, Option<FunctionName>)

A well-known function identified by a numeric ID, with an optional name.

§

Named(FunctionName)

A function identified by a name.

Implementations§

Source§

impl Function

Source

pub fn new_known(value: u64, name: Option<String>) -> Self

Creates a new function with a numeric ID and an optional string name.

This creates a “known” function, which is identified primarily by its numeric ID. The optional name is used for display purposes.

§Parameters
  • value - The numeric ID of the function
  • name - An optional name for the function
§Returns

A new Function instance

§Examples
use bc_envelope::prelude::*;

// Create a function with ID 1 and name "add"
let add_function = Function::new_known(1, Some("add".to_string()));
Source

pub fn new_named(name: &str) -> Self

Creates a new function identified by a string name.

This creates a “named” function, which is identified by its string name. This method cannot be used to declare a function at compile-time, as it creates a dynamic string.

§Parameters
  • name - The string name of the function
§Returns

A new Function instance

§Examples
use bc_envelope::prelude::*;

// Create a named function
let verify_function = Function::new_named("verifySignature");
Source

pub const fn new_with_static_name(value: u64, name: &'static str) -> Self

Creates a new function with a numeric ID and a static string name.

This creates a “known” function, which is identified primarily by its numeric ID. The static name is used for display purposes. This method can be used to declare a function at compile-time, as it uses a static string reference.

§Parameters
  • value - The numeric ID of the function
  • name - A static string name for the function
§Returns

A new Function instance

§Examples
use bc_envelope::prelude::*;

// Define a function constant
const ADD: Function = Function::new_with_static_name(1, "add");
Source

pub const fn new_static_named(name: &'static str) -> Self

Creates a new function identified by a static string name.

This creates a “named” function, which is identified by its string name. This method can be used to declare a function at compile-time, as it uses a static string reference.

§Parameters
  • name - A static string name for the function
§Returns

A new Function instance

§Examples
use bc_envelope::prelude::*;

// Define a named function constant
const VERIFY: Function = Function::new_static_named("verifySignature");
Source

pub fn name(&self) -> String

Returns the display name of the function.

For known functions with a name, returns the name. For known functions without a name, returns the numeric ID as a string. For named functions, returns the name enclosed in quotes.

§Returns

A string representation of the function name

§Examples
use bc_envelope::prelude::*;

let add = Function::new_known(1, Some("add".to_string()));
assert_eq!(add.name(), "add");

let unknown = Function::new_known(42, None);
assert_eq!(unknown.name(), "42");

let verify = Function::new_named("verifySignature");
assert_eq!(verify.name(), "\"verifySignature\"");
Source

pub fn named_name(&self) -> Option<String>

Returns the name of a named function, if available.

This method returns the raw string name for named functions, without quotes. For known functions (numeric IDs), it returns None.

§Returns

An Option containing the function name string if this is a named function, or None if it’s a known (numeric) function.

§Examples
use bc_envelope::prelude::*;

let add = Function::new_known(1, Some("add".to_string()));
assert_eq!(add.named_name(), None);

let verify = Function::new_named("verifySignature");
assert_eq!(verify.named_name(), Some("verifySignature".to_string()));

Trait Implementations§

Source§

impl CBORTagged for Function

Implementation of the CBORTagged trait for Function.

Functions are tagged with #6.40006 (TAG_FUNCTION).

Source§

fn cbor_tags() -> Vec<Tag>

Returns the CBOR tags associated with this type. Read more
Source§

impl CBORTaggedDecodable for Function

Implementation of the CBORTaggedDecodable trait for Function.

Unsigned integers are decoded as known functions. Text strings are decoded as named functions.

Source§

fn from_untagged_cbor(untagged_cbor: CBOR) -> Result<Self>

Creates an instance of this type by decoding it from untagged CBOR. Read more
Source§

fn from_tagged_cbor(cbor: CBOR) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from tagged CBOR. Read more
Source§

fn from_tagged_cbor_data(data: impl AsRef<[u8]>) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from binary encoded tagged CBOR. Read more
Source§

fn from_untagged_cbor_data(data: impl AsRef<[u8]>) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from binary encoded untagged CBOR. Read more
Source§

impl CBORTaggedEncodable for Function

Implementation of the CBORTaggedEncodable trait for Function.

Known functions are encoded as unsigned integers. Named functions are encoded as text strings.

Source§

fn untagged_cbor(&self) -> CBOR

Returns the untagged CBOR encoding of this instance. Read more
Source§

fn tagged_cbor(&self) -> CBOR

Returns the tagged CBOR encoding of this instance. Read more
Source§

fn tagged_cbor_data(&self) -> Vec<u8>

Returns the tagged value in CBOR binary representation. Read more
Source§

impl Clone for Function

Source§

fn clone(&self) -> Function

Returns a copy 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 Function

Source§

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

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

impl Display for Function

Implements display for Function.

Uses the description method with no functions store.

Source§

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

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

impl EnvelopeEncodable for Function

Implements the EnvelopeEncodable trait for Function.

This allows a Function to be directly converted to an Envelope.

Source§

fn into_envelope(self) -> Envelope

Converts this value into a Gordian Envelope. Read more
Source§

fn to_envelope(&self) -> Envelope
where Self: Clone,

Converts a reference to this value into a Gordian Envelope. Read more
Source§

impl From<&Function> for Function

Allows creating a Function from a reference to a Function.

This clones the function.

Source§

fn from(function: &Function) -> Self

Converts to this type from the input type.
Source§

impl From<&str> for Function

Allows creating a Function from a string reference.

This creates a named function with the given name.

Source§

fn from(name: &str) -> Self

Converts to this type from the input type.
Source§

impl From<Function> for CBOR

Allows creating a CBOR value from a Function.

Source§

fn from(value: Function) -> Self

Converts to this type from the input type.
Source§

impl From<u64> for Function

Allows creating a Function from a u64.

This creates a known function with the given numeric ID and no name.

Source§

fn from(value: u64) -> Self

Converts to this type from the input type.
Source§

impl Hash for Function

Implementation of hash for Function.

Known functions are hashed by their numeric ID. Named functions are hashed by their name.

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Function

Implementation of equality for Function.

Known functions are equal if they have the same numeric ID (names are ignored). Named functions are equal if they have the same name. Known and named functions are never equal to each other.

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl TryFrom<CBOR> for Function

Allows creating a Function from a CBOR value.

Source§

type Error = Error

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

fn try_from(cbor: CBOR) -> Result<Self>

Performs the conversion.
Source§

impl TryFrom<Envelope> for Function

Implements conversion from Envelope to Function.

This attempts to extract a Function from an Envelope leaf.

Source§

type Error = Error

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

fn try_from(envelope: Envelope) -> Result<Self>

Performs the conversion.
Source§

impl Eq for Function

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> CBOREncodable for T
where T: Into<CBOR> + Clone,

Source§

fn to_cbor(&self) -> CBOR

Converts this value to a CBOR object. Read more
Source§

fn to_cbor_data(&self) -> Vec<u8>

Converts this value directly to binary CBOR data. 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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<T> URDecodable for T

Source§

fn from_ur(ur: impl AsRef<UR>) -> Result<Self, Error>
where Self: Sized,

Source§

fn from_ur_string(ur_string: impl Into<String>) -> Result<Self, Error>
where Self: Sized,

Source§

impl<T> UREncodable for T

Source§

fn ur(&self) -> UR

Returns the UR representation of the object.
Source§

fn ur_string(&self) -> String

Returns the UR string representation of the object.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> CBORCodable for T

Source§

impl<T> CBORDecodable for T
where T: TryFrom<CBOR>,

Source§

impl<T> CBORTaggedCodable for T

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T

Source§

impl<T> URCodable for T