mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 18:11:10 +00:00
Subxt Guide (#890)
* WIP Starting to write book; extrinsics first pass done * cargo fmt * Ongoing work; events, constants, wip blocks * at_latest() and wip blocks * remove need to import parity-scale-codec crate with Subxt for macro to work * More docs; expanding on setup guide and finish pass of main sections * Tidy and remove example section for now * format book lines to 100chars * Fix example code * cargo fmt * cargo fmt * fix example * Fix typos * fix broken doc links, pub mods * Update Subxt macro docs * can't link to Subxt here * move macro docs to Subxt to make linking better and fix example code * note on macro about docs * cargo fmt * document the no_default_derives macro feature * Address feedback and remove redundant text * address review comments; minor tweaks * WIP add Runtime calls to book * Improve Runtime API docs * expose thing we forgot to expose and doc link fixes
This commit is contained in:
+1
-107
@@ -2,113 +2,6 @@
|
||||
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
||||
// see LICENSE for license details.
|
||||
|
||||
//! Generate a strongly typed API for interacting with a Substrate runtime from its metadata.
|
||||
//!
|
||||
//! Usage:
|
||||
//!
|
||||
//! Download metadata from a running Substrate node using `subxt-cli`:
|
||||
//!
|
||||
//! ```bash
|
||||
//! subxt metadata > polkadot_metadata.scale
|
||||
//! ```
|
||||
//!
|
||||
//! Annotate a Rust module with the `subxt` attribute referencing the aforementioned metadata file.
|
||||
//!
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(
|
||||
//! runtime_metadata_path = "polkadot_metadata.scale",
|
||||
//! )]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
//!
|
||||
//! The `subxt` macro will populate the annotated module with all of the methods and types required
|
||||
//! for submitting extrinsics and reading from storage for the given runtime.
|
||||
//!
|
||||
//! ## Substituting types
|
||||
//!
|
||||
//! In order to replace a generated type by a user-defined type, use `substitute_type`:
|
||||
//!
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(
|
||||
//! runtime_metadata_path = "polkadot_metadata.scale",
|
||||
//! substitute_type(path = "sp_arithmetic::per_things::Perbill", with = "sp_runtime::Perbill")
|
||||
//! )]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
//!
|
||||
//! This will replace the generated type and any usages with the specified type at the `use` import.
|
||||
//! It is useful for using custom decoding for specific types, or to provide a type with foreign
|
||||
//! trait implementations, or other specialized functionality.
|
||||
|
||||
//! ## Custom Derives
|
||||
//!
|
||||
//! By default all generated types are annotated with `scale::Encode` and `scale::Decode` derives.
|
||||
//! However when using the generated types in the client, they may require additional derives to be
|
||||
//! useful.
|
||||
//!
|
||||
//! ### Adding derives for all types
|
||||
//!
|
||||
//! Add `derive_for_all_types` with a comma separated list of the derives to apply to *all* types
|
||||
//!
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(
|
||||
//! runtime_metadata_path = "polkadot_metadata.scale",
|
||||
//! derive_for_all_types = "Eq, PartialEq"
|
||||
//! )]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
//!
|
||||
//! ### Adding derives for specific types
|
||||
//!
|
||||
//! Add `derive_for_type` for each specific type with a comma separated list of the derives to
|
||||
//! apply for that type only.
|
||||
//!
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(
|
||||
//! runtime_metadata_path = "polkadot_metadata.scale",
|
||||
//! derive_for_all_types = "Eq, PartialEq",
|
||||
//! derive_for_type(path = "frame_support::PalletId", derive = "Ord, PartialOrd"),
|
||||
//! derive_for_type(path = "sp_runtime::ModuleError", derive = "Hash"),
|
||||
//! )]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
//!
|
||||
//! ### Custom crate path
|
||||
//!
|
||||
//! In order to specify a custom crate path to be used for the code generation:
|
||||
//!
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(crate = "crate::path::to::subxt")]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
//!
|
||||
//! By default the path `::subxt` is used.
|
||||
//!
|
||||
//! ### Expose documentation
|
||||
//!
|
||||
//! In order to expose the documentation from the runtime metadata on the generated
|
||||
//! code, users must specify the `generate_docs` flag:
|
||||
//!
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(generate_docs)]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
//!
|
||||
//! By default the documentation is not generated.
|
||||
//!
|
||||
//! ### Runtime types generation
|
||||
//!
|
||||
//! In some cases, you may be interested only in the runtime types, like `RuntimeCall` enum. You can
|
||||
//! limit code generation to just `runtime_types` module with `runtime_types_only` flag:
|
||||
//!
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(runtime_types_only)]
|
||||
//! // or equivalently
|
||||
//! #[subxt::subxt(runtime_types_only = true)]
|
||||
//! ```
|
||||
|
||||
#![deny(unused_crate_dependencies)]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
use std::str::FromStr;
|
||||
@@ -174,6 +67,7 @@ struct SubstituteType {
|
||||
with: syn::Path,
|
||||
}
|
||||
|
||||
// Note: docs for this are in the subxt library; don't add any here as they will be appended.
|
||||
#[proc_macro_attribute]
|
||||
#[proc_macro_error]
|
||||
pub fn subxt(args: TokenStream, input: TokenStream) -> TokenStream {
|
||||
|
||||
Reference in New Issue
Block a user