binius_core/constraint_system/
value_index.rs1use binius_utils::serialization::{DeserializeBytes, SerializationError, SerializeBytes};
3use bytes::{Buf, BufMut};
4
5#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
7pub struct ValueIndex(pub u32);
8
9impl ValueIndex {
10 pub const INVALID: ValueIndex = ValueIndex(u32::MAX);
12}
13
14impl Default for ValueIndex {
16 fn default() -> Self {
17 Self::INVALID
18 }
19}
20
21impl SerializeBytes for ValueIndex {
22 fn serialize(&self, write_buf: impl BufMut) -> Result<(), SerializationError> {
23 self.0.serialize(write_buf)
24 }
25}
26
27impl DeserializeBytes for ValueIndex {
28 fn deserialize(read_buf: impl Buf) -> Result<Self, SerializationError>
29 where
30 Self: Sized,
31 {
32 Ok(ValueIndex(u32::deserialize(read_buf)?))
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 fn test_value_index_serialization_round_trip() {
42 let value_index = ValueIndex(12345);
43
44 let mut buf = Vec::new();
45 value_index.serialize(&mut buf).unwrap();
46
47 let deserialized = ValueIndex::deserialize(&mut buf.as_slice()).unwrap();
48 assert_eq!(value_index, deserialized);
49 }
50}