From 38547fd289bfc564d845a1f70a937742a28b982e Mon Sep 17 00:00:00 2001 From: 6r1d Date: Tue, 12 Sep 2023 08:30:34 +0300 Subject: [PATCH] [documentation]: #6 Move the Rust examples to this repository Signed-off-by: 6r1d --- Rust/Cargo.toml | 14 +++++ Rust/examples/client_account_definition.rs | 28 +++++++++ Rust/examples/client_domain_registration.rs | 64 +++++++++++++++++++++ Rust/examples/client_json_config.rs | 29 ++++++++++ Rust/src/main.rs | 3 + 5 files changed, 138 insertions(+) create mode 100644 Rust/Cargo.toml create mode 100644 Rust/examples/client_account_definition.rs create mode 100644 Rust/examples/client_domain_registration.rs create mode 100644 Rust/examples/client_json_config.rs create mode 100644 Rust/src/main.rs diff --git a/Rust/Cargo.toml b/Rust/Cargo.toml new file mode 100644 index 0000000..362fa1d --- /dev/null +++ b/Rust/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "iroha_2_examples" +version = "0.1.0" +edition = "2021" + +[dependencies] +iroha_data_model = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } +iroha_client = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } +iroha_config = { "git" = "https://github.com/hyperledger/iroha.git", branch = "iroha2-dev" } + +eyre = "0.6.8" + +serde = { version = "1.0.151", default-features = false } +serde_json = { version = "1.0.91", default-features = false } diff --git a/Rust/examples/client_account_definition.rs b/Rust/examples/client_account_definition.rs new file mode 100644 index 0000000..55ead08 --- /dev/null +++ b/Rust/examples/client_account_definition.rs @@ -0,0 +1,28 @@ +use eyre::{Error}; + +fn main() { + account_definition_test() + .expect("Account definition example is expected to work correctly"); + + println!("Account definition example works!"); +} + +fn account_definition_test() -> Result<(), Error> { + // #region account_definition_comparison + use iroha_data_model::prelude::AccountId; + + // Create an `iroha_data_model::AccountId` instance + // with a DomainId instance and a Domain ID for an account + let longhand_account_id = AccountId::new("white_rabbit".parse()?, "looking_glass".parse()?); + let account_id: AccountId = "white_rabbit@looking_glass" + .parse() + .expect("Valid, because the string contains no whitespace, has a single '@' character and is not empty after"); + + // Check that two ways to define an account match + assert_eq!(account_id, longhand_account_id); + + // #endregion account_definition_comparison + + // Finish the test successfully + Ok(()) +} diff --git a/Rust/examples/client_domain_registration.rs b/Rust/examples/client_domain_registration.rs new file mode 100644 index 0000000..544b878 --- /dev/null +++ b/Rust/examples/client_domain_registration.rs @@ -0,0 +1,64 @@ +use std::fs::File; +use eyre::{Error, WrapErr}; +use iroha_config::client::Configuration; + +fn main() { + // #region rust_config_load + let config_loc = "../configs/client/config.json"; + let file = File::open(config_loc) + .wrap_err("Unable to load the configuration file at `.....`") + .expect("Config file is loading normally."); + let config: Configuration = serde_json::from_reader(file) + .wrap_err("Failed to parse `../configs/client/config.json`") + .expect("Verified in tests"); + // #endregion rust_config_load + + domain_registration_test(&config) + .expect("Domain registration example is expected to work correctly"); + + println!("Domain registration example works!"); +} + +fn domain_registration_test(config: &Configuration) -> Result<(), Error> { + // #region domain_register_example_crates + use iroha_client::client::Client; + use iroha_data_model::{ + metadata::UnlimitedMetadata, + prelude::{Domain, DomainId, InstructionBox, RegisterBox}, + }; + // #endregion domain_register_example_crates + + // #region domain_register_example_create_domain + // Create a domain Id + let looking_glass: DomainId = "looking_glass".parse()?; + // #endregion domain_register_example_create_domain + + // #region domain_register_example_create_isi + // Create an ISI + let create_looking_glass = RegisterBox::new(Domain::new(looking_glass)); + // #endregion domain_register_example_create_isi + + // #region rust_client_create + // Create an Iroha client + let iroha_client: Client = Client::new(&config)?; + // #endregion rust_client_create + + // #region domain_register_example_prepare_tx + // Prepare a transaction + let metadata = UnlimitedMetadata::default(); + let instructions: Vec = vec![create_looking_glass.into()]; + let tx = iroha_client + .build_transaction(instructions, metadata) + .wrap_err("Error building a domain registration transaction")?; + // #endregion domain_register_example_prepare_tx + + // #region domain_register_example_submit_tx + // Submit a prepared domain registration transaction + iroha_client + .submit_transaction(&tx) + .wrap_err("Failed to submit transaction")?; + // #endregion domain_register_example_submit_tx + + // Finish the test successfully + Ok(()) +} diff --git a/Rust/examples/client_json_config.rs b/Rust/examples/client_json_config.rs new file mode 100644 index 0000000..3372595 --- /dev/null +++ b/Rust/examples/client_json_config.rs @@ -0,0 +1,29 @@ +use std::fs::File; +use eyre::{Error, WrapErr}; +use iroha_config::client::Configuration; + +fn main() { + // #region rust_config_load + let config_loc = "../configs/client/config.json"; + let file = File::open(config_loc) + .wrap_err("Unable to load the configuration file at `.....`") + .expect("Config file is loading normally."); + let config: Configuration = serde_json::from_reader(file) + .wrap_err("Failed to parse `../configs/client/config.json`") + .expect("Verified in tests"); + // #endregion rust_config_load + + json_config_client_test(&config) + .expect("JSON config client example is expected to work correctly"); + + println!("JSON client configuration test passed successfully!"); +} + +fn json_config_client_test(config: &Configuration) -> Result<(), Error> { + use iroha_client::client::Client; + + // Initialise a client with a provided config + let _current_client: Client = Client::new(&config)?; + + Ok(()) +} diff --git a/Rust/src/main.rs b/Rust/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/Rust/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}