use crate::{I256, U256};
use thruput_contract_spec as spec;
use xdrs::{
ReadResult, ReadXDR, Reader, WriteResult, WriteXDR, Writer,
WriterUnchecked,
};
impl<'r> ReadXDR<'r> for U256 {
#[inline]
fn read_xdr<R: Reader<'r>>(r: &mut R) -> ReadResult<Self> {
Ok(Self::from_be_bytes(<[u8; 32] as ReadXDR>::read_xdr(r)?))
}
}
impl WriteXDR for U256 {
#[inline]
fn write_xdr<F, W: Writer<F>>(&self, w: &mut W) -> WriteResult<()> {
self.to_be_bytes().write_xdr(w)
}
#[inline]
unsafe fn write_xdr_unchecked<F, W: WriterUnchecked<F>>(&self, w: &mut W) {
unsafe { self.to_be_bytes().write_xdr_unchecked(w) }
}
}
impl<'r> ReadXDR<'r> for I256 {
#[inline]
fn read_xdr<R: Reader<'r>>(r: &mut R) -> ReadResult<Self> {
Ok(Self::from_be_bytes(<[u8; 32] as ReadXDR>::read_xdr(r)?))
}
}
impl WriteXDR for I256 {
#[inline]
fn write_xdr<F, W: Writer<F>>(&self, w: &mut W) -> WriteResult<()> {
self.to_be_bytes().write_xdr(w)
}
#[inline]
unsafe fn write_xdr_unchecked<F, W: WriterUnchecked<F>>(&self, w: &mut W) {
unsafe { self.to_be_bytes().write_xdr_unchecked(w) }
}
}
impl spec::ContractTypeRefSpec for U256 {
const INFO: spec::ContractTypeInfo<'static> = spec::ContractTypeInfo {
ty: spec::ContractTypeView::U256,
};
}
impl spec::ContractTypeRefSpec for I256 {
const INFO: spec::ContractTypeInfo<'static> = spec::ContractTypeInfo {
ty: spec::ContractTypeView::I256,
};
}