pub enum Value {
MScalar {
size_in_bits: usize,
},
MFloat {
size_in_bits: usize,
},
MBool,
Scalar {
size_in_bits: usize,
kind: ScalarKind,
},
Float {
size_in_bits: usize,
},
Bool,
Ciphertext {
size_in_bits: usize,
},
ArcisX25519Pubkey,
Point,
Array(Vec<Value>),
Tuple(Vec<Value>),
Struct(Vec<Value>),
}Expand description
Circuit interface value types.
Represents all possible types that can be used as inputs or outputs in Arcium circuits.
Variants§
MScalar
MFloat
MBool
Scalar
Plaintext scalar value (integer).
§Fields
size_in_bits- Bit width of the scalar (8, 16, 32, 64, or 128)kind- Whether the scalar is signed or unsigned
§Examples
Scalar { size_in_bits: 32, kind: ScalarKind::Unsigned }represents u32Scalar { size_in_bits: 64, kind: ScalarKind::Signed }represents i64
Float
Bool
Ciphertext
ArcisX25519Pubkey
Point
Array(Vec<Value>)
Tuple(Vec<Value>)
Struct(Vec<Value>)
Implementations§
Source§impl Value
impl Value
Sourcepub fn size_in_scalars(&self) -> usize
pub fn size_in_scalars(&self) -> usize
Returns the number of scalar field elements this value occupies.
For primitive types (Scalar, Bool, Float, etc.), this returns 1. For composite types (Array, Tuple, Struct), this recursively counts all scalar fields.
§Examples
use arcis_interface::{Value, ScalarKind};
let scalar = Value::Scalar { size_in_bits: 32, kind: ScalarKind::Unsigned };
assert_eq!(scalar.size_in_scalars(), 1);
let tuple = Value::Tuple(vec![
Value::Scalar { size_in_bits: 32, kind: ScalarKind::Unsigned },
Value::Bool,
]);
assert_eq!(tuple.size_in_scalars(), 2);Sourcepub fn flatten(&self) -> Vec<Value>
pub fn flatten(&self) -> Vec<Value>
Flattens composite types into a vector of primitive values.
For primitive types, returns a single-element vector containing self. For composite types (Array, Tuple, Struct), recursively flattens all nested values into a flat vector of primitives.
§Examples
use arcis_interface::{Value, ScalarKind};
let scalar = Value::Scalar { size_in_bits: 32, kind: ScalarKind::Unsigned };
assert_eq!(scalar.flatten().len(), 1);
let tuple = Value::Tuple(vec![
Value::Scalar { size_in_bits: 32, kind: ScalarKind::Unsigned },
Value::Tuple(vec![Value::Bool, Value::Bool]),
]);
assert_eq!(tuple.flatten().len(), 3); // u32, bool, boolTrait Implementations§
Source§impl<'de> Deserialize<'de> for Value
impl<'de> Deserialize<'de> for Value
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>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for Value
impl StructuralPartialEq for Value
Auto Trait Implementations§
impl Freeze for Value
impl RefUnwindSafe for Value
impl Send for Value
impl Sync for Value
impl Unpin for Value
impl UnwindSafe for Value
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)