-
Notifications
You must be signed in to change notification settings - Fork 257
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs: Improve substitute_type rules and alternatives #1884
base: master
Are you sure you want to change the base?
docs: Improve substitute_type rules and alternatives #1884
Conversation
/// | ||
/// ### Important Notes | ||
/// - The path to replace must be an absolute path (fully qualified) | ||
/// - The replacement type must implement the necessary traits for encoding and decoding |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: Maybe we can mention the traits here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Woudln't that be dynamic?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/// #[subxt::subxt( | ||
/// runtime_metadata_path = "../artifacts/polkadot_metadata_full.scale", | ||
/// substitute_type(path = "sp_arithmetic::per_things::Perbill", with = "crate::Foo") | ||
/// )] | ||
/// mod polkadot {} | ||
/// | ||
/// # #[derive( | ||
/// # scale_encode::EncodeAsType, | ||
/// # scale_decode::DecodeAsType, | ||
/// # codec::Encode, | ||
/// # codec::Decode, | ||
/// # Clone, | ||
/// # Debug, | ||
/// # )] | ||
/// // In reality this needs some traits implementing on | ||
/// // it to allow it to be used in place of Perbill: | ||
/// pub struct Foo(u32); | ||
/// # impl codec::CompactAs for Foo { | ||
/// # type As = u32; | ||
/// # fn encode_as(&self) -> &Self::As { | ||
/// # &self.0 | ||
/// # } | ||
/// # fn decode_from(x: Self::As) -> Result<Self, codec::Error> { | ||
/// # Ok(Foo(x)) | ||
/// # } | ||
/// # } | ||
/// # impl From<codec::Compact<Foo>> for Foo { | ||
/// # fn from(v: codec::Compact<Foo>) -> Foo { | ||
/// # v.0 | ||
/// # } | ||
/// # } | ||
/// # fn main() {} | ||
/// mod polkadot { | ||
/// // Custom type to replace Perbill | ||
/// pub struct Foo(u32); | ||
/// // Note: Foo must implement required traits | ||
/// } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks wrong to me offhand; the substititue path is "crate::Foo" but then we move the type into crate::polkadot::Foo
? I'd just keep the type defined at the top level to avoid anybody thinking that there is a requirement to put the substitute type into this mod with the attr on
Closes #1464