Skip to main content

uor_addr/composition/f4/
value.rs

1//! CS-F4 typed-input carrier — wraps the canonicalize discipline's
2//! output as a `Borrowed` TermValue flowing through the ψ-pipeline.
3
4#![cfg(feature = "alloc")]
5
6use prism::operation::TermValue;
7use prism::pipeline::{
8    ConstrainedTypeShape, ConstraintRef, IntoBindingValue, PartitionProductFields,
9};
10
11/// CS-F4's typed-input carrier.
12#[derive(Clone, Copy, Debug)]
13pub struct F4Carrier<'a>(&'a [u8]);
14
15impl<'a> F4Carrier<'a> {
16    /// Wrap canonical-form bytes as a model input handle.
17    #[must_use]
18    pub fn new(canonical_bytes: &'a [u8]) -> Self {
19        Self(canonical_bytes)
20    }
21
22    /// Borrow the canonical-form bytes.
23    #[must_use]
24    pub fn canonical_bytes(&self) -> &'a [u8] {
25        self.0
26    }
27}
28
29impl ConstrainedTypeShape for F4Carrier<'_> {
30    const IRI: &'static str = "https://uor.foundation/addr/composition/F4QuotientCarrier";
31    const SITE_COUNT: usize = 1;
32    const CONSTRAINTS: &'static [ConstraintRef] = &[];
33    const CYCLE_SIZE: u64 = u64::MAX;
34}
35
36impl prism::uor_foundation::pipeline::__sdk_seal::Sealed for F4Carrier<'_> {}
37
38impl<'a> IntoBindingValue<'a> for F4Carrier<'a> {
39    fn as_binding_value<const INLINE_BYTES: usize>(&self) -> TermValue<'a, INLINE_BYTES> {
40        TermValue::borrowed(self.0)
41    }
42}
43
44impl PartitionProductFields for F4Carrier<'_> {
45    const FIELDS: &'static [(u32, u32)] = &[];
46    const FIELD_NAMES: &'static [&'static str] = &[];
47}