use super::*;
#[derive(Debug, PartialEq, Copy, Clone, Hash, Eq)]
pub struct InscriptionId {
pub txid: Txid,
pub index: u32,
}
impl Default for InscriptionId {
fn default() -> Self {
Self {
txid: Txid::all_zeros(),
index: 0,
}
}
}
impl InscriptionId {
pub(crate) fn parent_value(self) -> Vec<u8> {
let index = self.index.to_le_bytes();
let mut index_slice = index.as_slice();
while index_slice.last().copied() == Some(0) {
index_slice = &index_slice[0..index_slice.len() - 1];
}
self
.txid
.to_byte_array()
.iter()
.chain(index_slice)
.copied()
.collect()
}
}
impl<'de> Deserialize<'de> for InscriptionId {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
Ok(DeserializeFromStr::deserialize(deserializer)?.0)
}
}
impl Serialize for InscriptionId {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.collect_str(self)