mirror of
https://github.com/0glabs/0g-storage-node.git
synced 2024-12-27 08:45:19 +00:00
30 lines
810 B
Rust
30 lines
810 B
Rust
|
use crate::*;
|
||
|
|
||
|
/// Provides the one-byte "selector" from the SSZ union specification:
|
||
|
///
|
||
|
/// https://github.com/ethereum/consensus-specs/blob/v1.1.0-beta.3/ssz/simple-serialize.md#union
|
||
|
#[derive(Copy, Clone)]
|
||
|
pub struct UnionSelector(u8);
|
||
|
|
||
|
impl From<UnionSelector> for u8 {
|
||
|
fn from(union_selector: UnionSelector) -> u8 {
|
||
|
union_selector.0
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl PartialEq<u8> for UnionSelector {
|
||
|
fn eq(&self, other: &u8) -> bool {
|
||
|
self.0 == *other
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl UnionSelector {
|
||
|
/// Instantiate `self`, returning an error if `selector > MAX_UNION_SELECTOR`.
|
||
|
pub fn new(selector: u8) -> Result<Self, DecodeError> {
|
||
|
Some(selector)
|
||
|
.filter(|_| selector <= MAX_UNION_SELECTOR)
|
||
|
.map(Self)
|
||
|
.ok_or(DecodeError::UnionSelectorInvalid(selector))
|
||
|
}
|
||
|
}
|