use super::spell::{
CANDIDATE_BINDING, CARRIED_BINDING, CHOSEN_BINDING, COLLECTED_BINDING, ELECTED_BINDING,
INTO_BINDING, LENGTH_BINDING, MATERIAL_BINDING, NESTED_BINDING, PRESENT_BINDING,
REMAINING_BINDING, WIDTH_BINDING,
};
use super::types::{ReadRoad, RenderingContract, WriteRoad};
use super::{
CodecMemberShape, DECODE_ROAD, ENCODE_ROAD, MemberContract, ROSTER_CONSTANT, SLOT_ROAD,
};
pub const MEMBER_CONTRACT: [MemberContract; 5] = [
COUNT_CONTRACT.bill,
BYTES_CONTRACT.bill,
TEXT_CONTRACT.bill,
CLOSED_CHOICE_CONTRACT.bill,
NESTED_CONTRACT.bill,
];
const COUNT_CONTRACT: RenderingContract = RenderingContract {
bill: MemberContract {
shape: CodecMemberShape::Count,
encode_road: "u64::from",
decode_road: "<T as ::core::convert::TryFrom<u64>>::try_from",
},
write: WriteRoad::Count,
read: ReadRoad::Count,
};
const BYTES_CONTRACT: RenderingContract = RenderingContract {
bill: MemberContract {
shape: CodecMemberShape::Bytes,
encode_road: "<T as ::core::convert::AsRef<[u8]>>::as_ref",
decode_road: "<T as ::core::convert::TryFrom<::std::vec::Vec<u8>>>::try_from",
},
write: WriteRoad::Bytes,
read: ReadRoad::Bytes,
};
const TEXT_CONTRACT: RenderingContract = RenderingContract {
bill: MemberContract {
shape: CodecMemberShape::Text,
encode_road: "<T as ::core::convert::AsRef<str>>::as_ref",
decode_road: "<T as ::core::convert::TryFrom<::std::string::String>>::try_from",
},
write: WriteRoad::Text,
read: ReadRoad::Text,
};
const CLOSED_CHOICE_CONTRACT: RenderingContract = RenderingContract {
bill: MemberContract {
shape: CodecMemberShape::ClosedChoice,
encode_road: SLOT_ROAD,
decode_road: ROSTER_CONSTANT,
},
write: WriteRoad::ClosedChoice,
read: ReadRoad::ClosedChoice,
};
const NESTED_CONTRACT: RenderingContract = RenderingContract {
bill: MemberContract {
shape: CodecMemberShape::Nested,
encode_road: ENCODE_ROAD,
decode_road: DECODE_ROAD,
},
write: WriteRoad::Nested,
read: ReadRoad::Nested,
};
pub(super) const fn rendering_contract(shape: CodecMemberShape) -> RenderingContract {
match shape {
CodecMemberShape::Count => COUNT_CONTRACT,
CodecMemberShape::Bytes => BYTES_CONTRACT,
CodecMemberShape::Text => TEXT_CONTRACT,
CodecMemberShape::ClosedChoice => CLOSED_CHOICE_CONTRACT,
CodecMemberShape::Nested => NESTED_CONTRACT,
}
}
pub const RESERVED_BINDINGS: [&str; 12] = [
MATERIAL_BINDING,
REMAINING_BINDING,
INTO_BINDING,
NESTED_BINDING,
COLLECTED_BINDING,
CANDIDATE_BINDING,
CHOSEN_BINDING,
ELECTED_BINDING,
PRESENT_BINDING,
CARRIED_BINDING,
LENGTH_BINDING,
WIDTH_BINDING,
];