use std::ops::{Deref, DerefMut};
use serde::{Deserialize, Serialize};
use crate::{predicate::Predicate, serde::hash, Hash, Signature};
#[cfg(feature = "schema")]
use schemars::JsonSchema;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct SignedContract {
pub contract: Contract,
pub signature: Signature,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct Contract {
pub predicates: Vec<Predicate>,
#[serde(
serialize_with = "hash::serialize",
deserialize_with = "hash::deserialize"
)]
pub salt: Hash,
}
impl Contract {
pub const MAX_PREDICATES: usize = 100;
pub fn without_salt(predicates: Vec<Predicate>) -> Self {
Self {
predicates,
..Default::default()
}
}
}
impl From<Vec<Predicate>> for Contract {
fn from(predicates: Vec<Predicate>) -> Self {
Self {
predicates,
..Default::default()
}
}
}
impl AsRef<[Predicate]> for Contract {
fn as_ref(&self) -> &[Predicate] {
&self.predicates
}
}
impl Deref for Contract {
type Target = Vec<Predicate>;
fn deref(&self) -> &Self::Target {
&self.predicates
}
}
impl DerefMut for Contract {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.predicates
}
}