Skip to content

Commit

Permalink
fix: Dependency pruning (#250)
Browse files Browse the repository at this point in the history
* fix: Cleanup dependency requirements across crates

* fix: Cleanup dependency requirements across crates for examples

* fix: Localise non-repeating crates, instead of workspace
  • Loading branch information
ayushjain17 authored and Datron committed Sep 27, 2024
1 parent e571480 commit 8b68900
Show file tree
Hide file tree
Showing 30 changed files with 249 additions and 1,533 deletions.
1,285 changes: 68 additions & 1,217 deletions Cargo.lock

Large diffs are not rendered by default.

43 changes: 14 additions & 29 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ members = [
"examples/experimentation_client_integration_example",
"examples/cac_client_integration_example",
"examples/superposition-demo-app",
"crates/superposition_macros"
"crates/superposition_macros",
]

[[workspace.metadata.leptos]]
Expand All @@ -29,9 +29,11 @@ style-file = "crates/frontend/styles/style.css"
assets-dir = "crates/frontend/assets"

[workspace.dependencies]
dotenv = "0.15.0"
actix = "0.13.0"
actix-web = "4.5.0"
anyhow = "1.0.75"
base64 = "0.21.2"
chrono = { version = "0.4.26", features = ["serde"] }
derive_more = "^0.99"
diesel = { version = "2.1.0", features = [
"postgres",
"r2d2",
Expand All @@ -40,37 +42,20 @@ diesel = { version = "2.1.0", features = [
"uuid",
"postgres_backend",
] }
env_logger = "0.8"
jsonlogic = { git = "https://github.com/juspay/jsonlogic_rs.git", version = "0.5.3" }
jsonschema = "~0.17"
leptos = { version = "0.6.11" }
log = { version = "0.4.20", features = ["kv_unstable_serde"] }
serde = { version = "^1", features = ["derive"] }
serde_json = { version = "1.0" }
derive_more = "^0.99"
base64 = "0.21.2"
urlencoding = "~2.1.2"
once_cell = { version = "1.18.0" }
regex = "1.9.1"
chrono = { version = "0.4.26", features = ["serde"] }
uuid = { version = "1.3.4", features = ["v4", "serde"] }
reqwest = { version = "0.11.18", features = ["json"] }
jsonschema = "~0.17"
jsonlogic = { git = "https://github.com/juspay/jsonlogic_rs.git", version = "0.5.3" }
rs-snowflake = "0.6.0"
bytes = "1.4.0"
rusoto_core = "0.48.0"
rand = "0.8.5"
once_cell = { version = "1.18.0" }
anyhow = "1.0.75"
strum_macros = "0.25"
serde = { version = "^1", features = ["derive"] }
serde_json = { version = "1.0" }
strum = "0.25"
blake3 = "1.3.3"
leptos = { version = "0.6.11" }
leptos_meta = { version = "0.6.11" }
leptos_router = { version = "0.6.11" }
leptos_actix = { version = "0.6.11" }
thiserror = { version = "1.0.57" }
leptos-use = "0.10.3"
mime = "0.3.17"
aws-sdk-kms = {version = "1.38.0"}
aws-config = { version = "1.1.7", features = ["behavior-version-latest"] }
strum_macros = "0.25"
toml = { version = "0.8.8", features = ["preserve_order"] }
uuid = { version = "1.3.4", features = ["v4", "serde"] }

[workspace.lints.clippy]
mod_module_files = "warn"
15 changes: 6 additions & 9 deletions crates/cac_client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,19 @@ build = "build.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
once_cell = { workspace = true }
derive_more = { workspace = true }
actix-web = { workspace = true }
chrono = { workspace = true }
derive_more = { workspace = true }
jsonlogic = { workspace = true }
log = { workspace = true }
once_cell = { workspace = true }
reqwest = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
log = { workspace = true }
strum_macros = { workspace = true }
strum = { workspace = true }
tokio = {version = "1.29.1", features = ["full"]}
service_utils = { path = "../service_utils" }
superposition_types = {path = "../superposition_types" }
anyhow = { workspace = true }
superposition_macros = { path = "../superposition_macros" }
strum_macros = { workspace = true }
tokio = { version = "1.29.1", features = ["full"] }

[lib]
name = "cac_client"
crate-type = ["cdylib", "lib"]
Expand Down
45 changes: 20 additions & 25 deletions crates/cac_client/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
#![deny(unused_crate_dependencies)]
mod eval;
mod interface;
mod utils;

use actix_web::{rt::time::interval, web::Data};
use chrono::{DateTime, Utc};
use derive_more::{Deref, DerefMut};
use reqwest::{RequestBuilder, Response, StatusCode};
use serde::{Deserialize, Serialize};
use serde_json::{json, Map, Value};
use std::{
collections::{HashMap, HashSet},
convert::identity,
sync::Arc,
time::{Duration, UNIX_EPOCH},
};

use actix_web::{rt::time::interval, web::Data};
use chrono::{DateTime, Utc};
use derive_more::{Deref, DerefMut};
use reqwest::{RequestBuilder, Response, StatusCode};
use serde::{Deserialize, Serialize};
use serde_json::{json, Map, Value};
use tokio::sync::RwLock;
use utils::core::MapError;

use superposition_macros::unexpected_error;
use superposition_types::result as superposition;

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Context {
pub condition: Value,
Expand Down Expand Up @@ -166,14 +165,12 @@ impl Client {
let cac = self.config.read().await;
let mut config = cac.to_owned();
if let Some(prefix_list) = prefix {
config = filter_config_by_prefix(&config, prefix_list).map_err_to_string()?;
config = filter_config_by_prefix(&config, prefix_list)?;
}

let dimension_filtered_config = query_data
.filter(|query_map| !query_map.is_empty())
.map(|query_map| filter_config_by_dimensions(&config, &query_map))
.transpose()
.map_err_to_string()?;
.map(|query_map| filter_config_by_dimensions(&config, &query_map));

if let Some(filtered_config) = dimension_filtered_config {
config = filtered_config;
Expand Down Expand Up @@ -209,7 +206,7 @@ impl Client {
) -> Result<Map<String, Value>, String> {
let mut cac = self.eval(query_data, merge_strategy).await?;
if let Some(keys) = filter_keys {
cac = filter_keys_by_prefix(cac, keys).map_err_to_string()?;
cac = filter_keys_by_prefix(cac, keys);
}
Ok(cac)
}
Expand All @@ -221,8 +218,7 @@ impl Client {
let configs = self.config.read().await;
let mut default_configs = configs.default_configs.clone();
if let Some(keys) = filter_keys {
default_configs =
filter_keys_by_prefix(default_configs, keys).map_err_to_string()?;
default_configs = filter_keys_by_prefix(default_configs, keys);
}
Ok(default_configs)
}
Expand Down Expand Up @@ -269,33 +265,32 @@ pub use eval::merge;
pub fn filter_keys_by_prefix(
keys: Map<String, Value>,
prefix_list: Vec<String>,
) -> superposition::Result<Map<String, Value>> {
) -> Map<String, Value> {
let prefix_list: HashSet<String> = HashSet::from_iter(prefix_list);
Ok(keys
.into_iter()
keys.into_iter()
.filter(|(key, _)| {
prefix_list
.iter()
.any(|prefix_str| key.starts_with(prefix_str))
})
.collect())
.collect()
}

pub fn filter_config_by_prefix(
config: &Config,
prefix_list: Vec<String>,
) -> superposition::Result<Config> {
) -> Result<Config, String> {
let mut filtered_overrides: Map<String, Value> = Map::new();

let filtered_default_config: Map<String, Value> =
filter_keys_by_prefix(config.default_configs.clone(), prefix_list)?;
filter_keys_by_prefix(config.default_configs.clone(), prefix_list);

for (key, overrides) in &config.overrides {
let overrides_map = overrides
.as_object()
.ok_or_else(|| {
log::error!("failed to decode overrides.");
unexpected_error!("failed to decode overrides.")
String::from("failed to decode overrides.")
})?
.clone();

Expand Down Expand Up @@ -328,7 +323,7 @@ pub fn filter_config_by_prefix(
pub fn filter_config_by_dimensions(
config: &Config,
dimension_data: &Map<String, Value>,
) -> superposition::Result<Config> {
) -> Config {
let filtered_context = config
.contexts
.iter()
Expand Down Expand Up @@ -358,5 +353,5 @@ pub fn filter_config_by_dimensions(
default_configs: config.default_configs.clone(),
};

Ok(filtered_config)
filtered_config
}
5 changes: 3 additions & 2 deletions crates/cac_toml/src/bin.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use cac_toml::ContextAwareConfig;
use clap::{Arg, Command};
use std::collections::HashMap;
use std::process;

use cac_toml::ContextAwareConfig;
use clap::{Arg, Command};
use toml::Value;

fn main() {
Expand Down
7 changes: 4 additions & 3 deletions crates/cac_toml/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use pest::iterators::Pair;
use pest::Parser;
use pest_derive::Parser;
use std::cmp::Ordering;
use std::collections::{BinaryHeap, HashMap};
use std::fmt;
use std::fs;
use std::path::Path;
use std::string::String;

use pest::iterators::Pair;
use pest::Parser;
use pest_derive::Parser;
use toml::Value;

// the grammar for context expressions written using PEST
Expand Down
64 changes: 15 additions & 49 deletions crates/context_aware_config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,61 +7,27 @@ edition = "2021"


[dependencies]
cac_client = { path = "../cac_client" }
frontend = { path = "../frontend" }

# env
dotenv = { workspace = true }
# Https server framework
actix = { workspace = true }
actix-http = "3.3.1"
actix-web = { workspace = true }
# To help generate snowflake ids
rs-snowflake = { workspace = true }
# To help with generating uuids
uuid = { workspace = true }
# To serialize and deserialize objects from json
serde = { workspace = true }
serde_json = { workspace = true }
# For logging and debugging
env_logger = { workspace = true }
log = { workspace = true }
# to work with enums
strum_macros = { workspace = true }
strum = { workspace = true }
derive_more = { workspace = true }
# date and time
anyhow = { workspace = true }
base64 = { workspace = true }
blake3 = "1.3.3"
cac_client = { path = "../cac_client" }
chrono = { workspace = true }
# ORM
derive_more = { workspace = true }
diesel = { workspace = true }
blake3 = { workspace = true }
bytes = { workspace = true }
rusoto_core = { workspace = true }
base64 = { workspace = true }
diesel-derive-enum = { version = "2.0.1", features = ["postgres"] }
urlencoding = { workspace = true }
jsonschema = { workspace = true }
reqwest = { workspace = true, features = ["rustls-tls"] }
rand = { workspace = true }
service_utils = { path = "../service_utils" }
experimentation_platform = { path = "../experimentation_platform" }
tracing-log = "0.1.3"
valuable = { version = "0.1.0", features = ["std", "alloc", "derive"] }
itertools = "0.10.5"
futures = "0.3.28"
actix-http = "3.3.1"
futures-util = "0.3.28"
actix-cors = "0.6.4"
leptos_actix = { version = "0.5.2" }
leptos = { workspace = true }
leptos_meta = { workspace = true }
leptos_router = { workspace = true }
actix-files = { version = "0.6" }
anyhow = { workspace = true }
regex = { workspace = true }
mime = { workspace = true }
itertools = "0.10.5"
jsonlogic = { workspace = true }
superposition_types = { path = "../superposition_types" }
jsonschema = { workspace = true }
log = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
service_utils = { path = "../service_utils" }
strum_macros = { workspace = true }
superposition_macros = { path = "../superposition_macros" }
superposition_types = { path = "../superposition_types", features = ["result"] }
uuid = { workspace = true }


[features]
Expand Down
1 change: 1 addition & 0 deletions crates/context_aware_config/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#![deny(unused_crate_dependencies)]
pub mod api;
pub mod db;
pub mod helpers;
Expand Down
10 changes: 4 additions & 6 deletions crates/experimentation_client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,14 @@ version = "0.8.1"
edition = "2021"

[dependencies]
once_cell = { workspace = true }
chrono = { workspace = true }
derive_more = { workspace = true }
jsonlogic = { workspace = true }
reqwest = { workspace = true , features = ["json"]}
once_cell = { workspace = true }
reqwest = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
tokio = {version = "1.29.1", features = ["full"]}
dotenv = { workspace = true }
derive_more = { workspace = true }
log = { workspace = true }
tokio = { version = "1.29.1", features = ["full"] }

[lib]
name = "experimentation_client"
Expand Down
1 change: 1 addition & 0 deletions crates/experimentation_client/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#![deny(unused_crate_dependencies)]
mod interface;
mod types;
mod utils;
Expand Down
Loading

0 comments on commit 8b68900

Please sign in to comment.