diff --git a/Cargo.lock b/Cargo.lock index cdeaa81..1861317 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -140,6 +140,13 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "mfm_core" +version = "0.1.0" +dependencies = [ + "serde", +] + [[package]] name = "mfm_machine" version = "0.1.0" @@ -300,18 +307,18 @@ checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "serde" -version = "1.0.192" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 5da1285..430b2a9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,4 +6,5 @@ members = [ "mfm_cli", "mfm_machine", "mfm_machine_derive", + "mfm_core", ] diff --git a/mfm_core/Cargo.toml b/mfm_core/Cargo.toml new file mode 100644 index 0000000..c8f2b8e --- /dev/null +++ b/mfm_core/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "mfm_core" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = "1.0.193" diff --git a/mfm_core/src/config/mod.rs b/mfm_core/src/config/mod.rs new file mode 100644 index 0000000..2c7f786 --- /dev/null +++ b/mfm_core/src/config/mod.rs @@ -0,0 +1,88 @@ +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] +pub enum Kind { + EVM, +} + +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub struct Network { + pub name: String, + pub kind: Kind, + pub symbol: String, + pub decimals: Option, + pub chain_id: u32, + pub node_url: String, + pub node_url_failover: Option, + pub blockexplorer_url: Option, + pub min_balance_coin: f64, + pub wrapped_asset: Option, +} + +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub struct Networks(HashMap); +impl Networks { + pub fn get(&self, key: &str) -> Option<&Network> { + self.0.get(key) + } + pub fn hashmap(&self) -> &HashMap { + &self.0 + } +} + +#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] +pub struct Dex { + pub name: String, + pub kind: Kind, + pub router_address: String, + pub factory_address: String, + pub network_id: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] +pub struct Dexes(HashMap); +impl Dexes { + pub fn hashmap(&self) -> &HashMap { + &self.0 + } + pub fn get(&self, key: &str) -> Option<&Dex> { + self.0.get(key) + } +} + +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub struct TokenNetwork { + pub(crate) name: String, + pub(crate) network_id: String, + pub(crate) address: String, + pub(crate) slippage: f64, + pub(crate) path_asset: String, +} + +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub struct TokenNetworks(HashMap); + +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub struct Token { + pub(crate) kind: String, + pub(crate) networks: TokenNetworks, +} + +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub struct Tokens(HashMap); +impl Tokens { + pub fn hashmap(&self) -> &HashMap { + &self.0 + } + + pub fn get(&self, key: &str) -> Option<&Token> { + self.0.get(key) + } +} + +pub struct Config { + pub networks: Networks, + pub dexes: Dexes, + pub tokens: Tokens, +} diff --git a/mfm_core/src/lib.rs b/mfm_core/src/lib.rs new file mode 100644 index 0000000..e489ce0 --- /dev/null +++ b/mfm_core/src/lib.rs @@ -0,0 +1,4 @@ +pub mod config; +pub mod states; +pub mod tasks; + diff --git a/mfm_core/src/states/mod.rs b/mfm_core/src/states/mod.rs new file mode 100644 index 0000000..087648b --- /dev/null +++ b/mfm_core/src/states/mod.rs @@ -0,0 +1,5 @@ +use crate::config::Config; + +pub struct ReadConfig { + pub config: Config, +} diff --git a/mfm_core/src/tasks/mod.rs b/mfm_core/src/tasks/mod.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/mfm_core/src/tasks/mod.rs @@ -0,0 +1 @@ +