diff --git a/Rust/Cargo.toml b/Rust/Cargo.toml new file mode 100644 index 0000000..9491edc --- /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_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!"); +}