Skip to content

Commit

Permalink
Merge pull request #85 from sephynox/refactoring
Browse files Browse the repository at this point in the history
Refactoring
  • Loading branch information
LimpidCrypto authored Sep 8, 2024
2 parents 3a62396 + bfdf83b commit e452a47
Show file tree
Hide file tree
Showing 94 changed files with 797 additions and 1,065 deletions.
47 changes: 39 additions & 8 deletions .github/workflows/unit_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,57 @@ jobs:
with:
toolchain: stable
- uses: actions-rs/cargo@v1
name: Build with default features
with:
command: build
args: --release --all-features
args: --release
- uses: actions-rs/cargo@v1
name: Build with no default features
with:
command: build
args: --release --no-default-features --features core,models,websocket-std
args: --release --no-default-features
- uses: actions-rs/cargo@v1
name: Build for no_std
with:
command: test
args: --all-features
command: build
args: --release --no-default-features --features embassy-rt,core,wallet,models,helpers,websocket,json-rpc
- uses: actions-rs/cargo@v1
name: Build only core
with:
command: test
args: --no-default-features --features core,models,websocket-std
command: build
args: --release --no-default-features --features core
- uses: actions-rs/cargo@v1
name: Build only wallet
with:
command: build
args: --release --no-default-features --features wallet
- uses: actions-rs/cargo@v1
name: Build only models
with:
command: build
args: --release --no-default-features --features models
- uses: actions-rs/cargo@v1
name: Build only helpers
with:
command: build
args: --release --no-default-features --features helpers,tokio-rt
- uses: actions-rs/cargo@v1
name: Build only websocket
with:
command: build
args: --release --no-default-features --features websocket
- uses: actions-rs/cargo@v1
name: Build only core
with:
command: build
args: --release --no-default-features --features json-rpc
- uses: actions-rs/cargo@v1
name: Test with default features
with:
command: test
args: --no-default-features --features std,models,websocket,websocket-codec
args: --release
- uses: actions-rs/cargo@v1
name: Test for no_std
with:
command: test
args: --no-default-features --features std,websocket-std,helpers
args: --release --no-default-features --features embassy-rt,core,wallet,models,helpers,websocket,json-rpc
100 changes: 45 additions & 55 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ tag-name = "{{version}}"
[lib]
name = "xrpl"
crate-type = ["lib"]
proc-macro = true

[dependencies]
lazy_static = "1.4.0"
Expand Down Expand Up @@ -62,37 +61,29 @@ fnv = { version = "1.0.7", default-features = false }
derive-new = { version = "0.6.0", default-features = false }
thiserror-no-std = "2.0.2"
anyhow = { version = "1.0.69", default-features = false }
embassy-sync = "0.6.0"

# networking
url = { version = "2.2.2", default-features = false, optional = true }
# websocket
embassy-sync = { version = "0.6.0", optional = true }
url = { version = "2.2.2", default-features = false }
embedded-io-async = { version = "0.6.1", optional = true }
embedded-websocket = { version = "0.9.3", default-features = false, optional = true }
futures = { version = "0.3.30", optional = true }
rand_core = { version = "0.6.4", default-features = false }
# websocket-codec
bytes = { version = "1.7.1", default-features = false, optional = true }
tokio-util = { version = "0.7.11", features = ["codec"], optional = true }
# websocket-std
embassy-futures = { version = "0.1.1", optional = true }
tokio = { version = "1.0", default-features = false, features = [
"net",
], optional = true }
tokio = { version = "1.0", optional = true }
embassy-time = { version = "0.3.2", optional = true }
embedded-websocket = { git = "https://github.com/LimpidCrypto/embedded-websocket", branch = "embedded-io-async", optional = true, default-features = false, features = [
"embedded-io-async",
] }
reqwless = { version = "0.12.1", optional = true }
reqwest = { version = "0.12.7", optional = true, features = ["json"] }
tokio-tungstenite = { version = "0.23.1", optional = true, features = [
"native-tls",
] }
embassy-futures = { version = "0.1.1", optional = true }
embedded-nal-async = { version = "0.7.1", optional = true }
# json-rpc
reqwless = { version = "0.12.1", optional = true }
# json-rpc-std
reqwest = { version = "0.12.5", features = ["json"], optional = true }
embassy-time = { version = "0.3.2", optional = true }

[dev-dependencies]
criterion = "0.5.1"
tokio = { version = "1.0", features = ["full"] }
tokio-util = { version = "0.7.11", features = ["codec"] }
embedded-io-adapters = { version = "0.6.1", features = ["tokio-1"] }

[[bench]]
name = "benchmarks"
Expand All @@ -101,63 +92,56 @@ harness = false
[features]
default = [
"std",
"tokio-rt",
"core",
"wallet",
"models",
"utils",
"helpers",
"websocket-std",
"websocket",
"json-rpc",
]
models = [
"transaction-models",
"request-models",
"ledger-models",
"result-models",
]
models = ["core", "transactions", "requests", "ledger", "results"]
transactions = ["core", "amounts", "currencies"]
requests = ["core", "amounts", "currencies"]
results = ["core", "amounts", "currencies"]
ledger = ["core", "amounts", "currencies"]
transaction-models = ["core"]
request-models = []
result-models = ["request-models", "ledger-models"]
ledger-models = []
helpers = [
"account-helpers",
"ledger-helpers",
"transaction-helpers",
"wallet-helpers",
]
account-helpers = ["amounts", "currencies", "requests", "results"]
ledger-helpers = ["amounts", "currencies", "requests", "results"]
wallet-helpers = ["requests", "results"]
account-helpers = ["core", "request-models", "result-models"]
ledger-helpers = ["request-models", "result-models"]
wallet-helpers = ["wallet", "request-models", "result-models"]
transaction-helpers = [
"wallet",
"amounts",
"currencies",
"requests",
"results",
"transactions",
"ledger",
"embassy-time",
"account-helpers",
"ledger-helpers",
"request-models",
"result-models",
"transaction-models",
"ledger-models",
]
amounts = ["core"]
currencies = ["core"]
json-rpc = ["url", "reqwless", "embassy-sync", "embedded-nal-async"]
json-rpc-std = ["url", "reqwest", "embassy-sync", "tokio"]
wallet = ["core"]
json-rpc = ["reqwless", "embedded-nal-async"]
websocket = [
"url",
"request-models",
"result-models",
"futures",
"embedded-websocket",
"embedded-io-async",
"embassy-sync",
]
websocket-codec = ["bytes", "tokio-util"]
websocket-std = [
"url",
"futures",
"tokio",
"tokio-tungstenite",
"embassy-futures",
"embassy-sync",
"embedded-websocket",
]
core = ["utils"]
utils = []
std = [
"embedded-websocket/std",
"futures/std",
"rand/std",
"regex/std",
"chrono/std",
Expand All @@ -168,6 +152,12 @@ std = [
"serde/std",
"indexmap/std",
"secp256k1/std",
"embassy-time/std",
"embedded-websocket/std",
"reqwest",
"tokio",
"tokio-tungstenite",
"futures/std",
]
embassy-time = ["dep:embassy-time"]
# runtimes
tokio-rt = ["tokio"]
embassy-rt = ["embassy-time"]
13 changes: 6 additions & 7 deletions src/asynch/account/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@ use anyhow::Result;
use crate::{
core::addresscodec::{is_valid_xaddress, xaddress_to_classic_address},
models::{
amount::XRPAmount,
ledger::AccountRoot,
requests::{AccountInfo, AccountTx},
results,
ledger::objects::AccountRoot,
requests::{account_info::AccountInfo, account_tx::AccountTx},
results, XRPAmount,
},
Err,
};
Expand Down Expand Up @@ -82,14 +81,14 @@ where
let account_info = client.request(request).await?;

Ok(account_info
.try_into_result::<results::AccountInfo<'_>>()?
.try_into_result::<results::account_info::AccountInfo<'_>>()?
.account_data)
}

pub async fn get_latest_transaction<'a: 'b, 'b, C>(
mut address: Cow<'a, str>,
client: &C,
) -> Result<results::AccountTx<'b>>
) -> Result<results::account_tx::AccountTx<'b>>
where
C: AsyncClient,
{
Expand All @@ -112,5 +111,5 @@ where
None,
);
let response = client.request(account_tx.into()).await?;
response.try_into_result::<results::AccountTx<'_>>()
response.try_into_result::<results::account_tx::AccountTx<'_>>()
}
4 changes: 2 additions & 2 deletions src/asynch/clients/async_client.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use super::{client::Client, CommonFields};
use crate::models::{
requests::{ServerState, XRPLRequest},
results::{ServerState as ServerStateResult, XRPLResponse},
requests::{server_state::ServerState, XRPLRequest},
results::{server_state::ServerState as ServerStateResult, XRPLResponse},
};
use anyhow::Result;

Expand Down
17 changes: 13 additions & 4 deletions src/asynch/clients/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,34 @@ use crate::models::{
requests::{Request, XRPLRequest},
results::XRPLResponse,
};
#[cfg(feature = "std")]
use crate::utils::get_random_id;
use alloc::borrow::{Cow, ToOwned};
use alloc::{
borrow::ToOwned,
string::{String, ToString},
};
use anyhow::Result;
use rand::Rng;
use url::Url;

/// Generate a random id.
pub fn get_random_id<T: rand::RngCore>(rng: &mut T) -> String {
let id: u32 = rng.gen();
id.to_string()
}

#[allow(async_fn_in_trait)]
pub trait Client {
async fn request_impl<'a: 'b, 'b>(&self, request: XRPLRequest<'a>) -> Result<XRPLResponse<'b>>;

fn get_host(&self) -> Url;

fn set_request_id(&self, request: &mut XRPLRequest<'_>) -> () {
fn set_request_id(&self, request: &mut XRPLRequest<'_>) {
let common_fields = request.get_common_fields_mut();
common_fields.id = match &common_fields.id {
Some(id) => Some(id.to_owned()),
None => {
#[cfg(feature = "std")]
{
use alloc::borrow::Cow;
let mut rng = rand::thread_rng();
Some(Cow::Owned(get_random_id(&mut rng)))
}
Expand Down
6 changes: 2 additions & 4 deletions src/asynch/clients/json_rpc/exceptions.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
use reqwest::Response;
use thiserror_no_std::Error;

#[derive(Debug, Error)]
pub enum XRPLJsonRpcException {
#[cfg(feature = "json-rpc")]
#[error("Reqwless error")]
ReqwlessError,
#[cfg(feature = "json-rpc-std")]
#[cfg(feature = "std")]
#[error("Request error: {0:?}")]
RequestError(Response),
RequestError(reqwest::Response),
}
Loading

0 comments on commit e452a47

Please sign in to comment.