mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-15 13:51:11 +00:00
Update to parity-scale-codec (#3232)
* WIP: update codec * WIP * compiling * WIP * rename parity-scale-codec to codec * WIP * fix * remove old comments * use published crates * fix expected error msg * bump version * fmt and fix * remove old comment * fix wrong decoding impl * implement encode like for structures * undo removal of old pending changes * trailingzeroinput * Apply suggestions from code review Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com> Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com> * update codec * fmt * version is 1.0.0 * show more error * fmt
This commit is contained in:
committed by
Bastian Köcher
parent
a0d442333f
commit
4ed67e03a4
@@ -1029,21 +1029,30 @@ pub trait OpaqueKeys: Clone {
|
||||
/// Get the raw bytes of key with key-type ID `i`.
|
||||
fn get_raw(&self, i: super::KeyTypeId) -> &[u8];
|
||||
/// Get the decoded key with index `i`.
|
||||
fn get<T: Decode>(&self, i: super::KeyTypeId) -> Option<T> { T::decode(&mut self.get_raw(i)) }
|
||||
fn get<T: Decode>(&self, i: super::KeyTypeId) -> Option<T> {
|
||||
T::decode(&mut self.get_raw(i)).ok()
|
||||
}
|
||||
/// Verify a proof of ownership for the keys.
|
||||
fn ownership_proof_is_valid(&self, _proof: &[u8]) -> bool { true }
|
||||
}
|
||||
|
||||
/// Input that adds infinite number of zero after wrapped input.
|
||||
struct TrailingZeroInput<'a>(&'a [u8]);
|
||||
|
||||
impl<'a> codec::Input for TrailingZeroInput<'a> {
|
||||
fn read(&mut self, into: &mut [u8]) -> usize {
|
||||
let len = into.len().min(self.0.len());
|
||||
into[..len].copy_from_slice(&self.0[..len]);
|
||||
for i in &mut into[len..] {
|
||||
fn remaining_len(&mut self) -> Result<Option<usize>, codec::Error> {
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
fn read(&mut self, into: &mut [u8]) -> Result<(), codec::Error> {
|
||||
let len_from_inner = into.len().min(self.0.len());
|
||||
into[..len_from_inner].copy_from_slice(&self.0[..len_from_inner]);
|
||||
for i in &mut into[len_from_inner..] {
|
||||
*i = 0;
|
||||
}
|
||||
self.0 = &self.0[len..];
|
||||
into.len()
|
||||
self.0 = &self.0[len_from_inner..];
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1091,7 +1100,7 @@ impl<T: Encode + Decode + Default, Id: Encode + Decode + TypeId> AccountIdConver
|
||||
x.using_encoded(|d| {
|
||||
if &d[0..4] != Id::TYPE_ID { return None }
|
||||
let mut cursor = &d[4..];
|
||||
let result = Decode::decode(&mut cursor)?;
|
||||
let result = Decode::decode(&mut cursor).ok()?;
|
||||
if cursor.iter().all(|x| *x == 0) {
|
||||
Some(result)
|
||||
} else {
|
||||
@@ -1104,7 +1113,7 @@ impl<T: Encode + Decode + Default, Id: Encode + Decode + TypeId> AccountIdConver
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::AccountIdConversion;
|
||||
use crate::codec::{Encode, Decode};
|
||||
use crate::codec::{Encode, Decode, Input};
|
||||
|
||||
#[derive(Encode, Decode, Default, PartialEq, Debug)]
|
||||
struct U32Value(u32);
|
||||
@@ -1153,6 +1162,22 @@ mod tests {
|
||||
let r = U16Value::try_from_account(&0x0100_c0da_f00dcafe_u64);
|
||||
assert!(r.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn trailing_zero_should_work() {
|
||||
let mut t = super::TrailingZeroInput(&[1, 2, 3]);
|
||||
assert_eq!(t.remaining_len(), Ok(None));
|
||||
let mut buffer = [0u8; 2];
|
||||
assert_eq!(t.read(&mut buffer), Ok(()));
|
||||
assert_eq!(t.remaining_len(), Ok(None));
|
||||
assert_eq!(buffer, [1, 2]);
|
||||
assert_eq!(t.read(&mut buffer), Ok(()));
|
||||
assert_eq!(t.remaining_len(), Ok(None));
|
||||
assert_eq!(buffer, [3, 0]);
|
||||
assert_eq!(t.read(&mut buffer), Ok(()));
|
||||
assert_eq!(t.remaining_len(), Ok(None));
|
||||
assert_eq!(buffer, [0, 0]);
|
||||
}
|
||||
}
|
||||
|
||||
/// Calls a given macro a number of times with a set of fixed params and an incrementing numeral.
|
||||
|
||||
Reference in New Issue
Block a user