Skip to content

Commit

Permalink
Merge pull request #1238 from rainlanguage/2025-02-05-deposit-presets…
Browse files Browse the repository at this point in the history
…-fix
  • Loading branch information
hardyjosh authored Feb 5, 2025
2 parents 192af45 + 6df3d02 commit f9f4ef8
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 64 deletions.
25 changes: 16 additions & 9 deletions crates/js_api/src/gui/deposits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ impl DotrainOrderGui {
.map_err(|_| GuiError::InvalidPreset)?;
gui_deposit
.presets
.as_ref()
.ok_or(GuiError::PresetsNotSet)?
.get(index)
.ok_or(GuiError::InvalidPreset)?
.clone()
Expand Down Expand Up @@ -59,16 +61,21 @@ impl DotrainOrderGui {
.find(|dg| dg.token.as_ref().map_or(false, |t| t.key == token))
.ok_or(GuiError::DepositTokenNotFound(token.clone()))?;

let value = if let Some(index) = gui_deposit.presets.iter().position(|p| **p == amount) {
field_values::PairValue {
is_preset: true,
value: index.to_string(),
}
} else {
field_values::PairValue {
let value = match gui_deposit.presets.as_ref() {
Some(presets) => match presets.iter().position(|p| **p == amount) {
Some(index) => field_values::PairValue {
is_preset: true,
value: index.to_string(),
},
None => field_values::PairValue {
is_preset: false,
value: amount,
},
},
None => field_values::PairValue {
is_preset: false,
value: amount,
}
},
};

self.deposits.insert(token, value);
Expand All @@ -88,6 +95,6 @@ impl DotrainOrderGui {
.iter()
.find(|dg| dg.token.as_ref().map_or(false, |t| t.key == key))
.ok_or(GuiError::DepositTokenNotFound(key.clone()))?;
Ok(gui_deposit.presets.clone())
Ok(gui_deposit.presets.clone().unwrap_or(vec![]))
}
}
2 changes: 2 additions & 0 deletions crates/js_api/src/gui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ pub enum GuiError {
TokenNotFound(String),
#[error("Invalid preset")]
InvalidPreset,
#[error("Presets not set")]
PresetsNotSet,
#[error("Select tokens not set")]
SelectTokensNotSet,
#[error("Token must be selected: {0}")]
Expand Down
13 changes: 7 additions & 6 deletions crates/settings/src/config_source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -659,12 +659,13 @@ gui:
assert_eq!(deployment.deposits.len(), 1);
let deposit = &deployment.deposits[0];
assert_eq!(deposit.token, "token1".to_string());
assert_eq!(deposit.presets.len(), 5);
assert_eq!(deposit.presets[0], "0".to_string());
assert_eq!(deposit.presets[1], "10".to_string());
assert_eq!(deposit.presets[2], "100".to_string());
assert_eq!(deposit.presets[3], "1000".to_string());
assert_eq!(deposit.presets[4], "10000".to_string());
let presets = deposit.presets.as_ref().unwrap();
assert_eq!(presets.len(), 5);
assert_eq!(presets[0], "0".to_string());
assert_eq!(presets[1], "10".to_string());
assert_eq!(presets[2], "100".to_string());
assert_eq!(presets[3], "1000".to_string());
assert_eq!(presets[4], "10000".to_string());
assert_eq!(deployment.fields.len(), 2);
let field = &deployment.fields[0];
assert_eq!(field.binding, "binding-1");
Expand Down
64 changes: 18 additions & 46 deletions crates/settings/src/gui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl_all_wasm_traits!(GuiPresetSource);
#[serde(rename_all = "kebab-case")]
pub struct GuiDepositSource {
pub token: TokenRef,
pub presets: Vec<String>,
pub presets: Option<Vec<String>>,
}

#[typeshare]
Expand Down Expand Up @@ -190,8 +190,7 @@ impl_all_wasm_traits!(GuiPreset);
pub struct GuiDeposit {
#[typeshare(typescript(type = "Token | undefined"))]
pub token: Option<Arc<Token>>,
#[cfg_attr(target_family = "wasm", tsify(type = "string[]"))]
pub presets: Vec<String>,
pub presets: Option<Vec<String>>,
}
#[cfg(target_family = "wasm")]
impl_all_wasm_traits!(GuiDeposit);
Expand Down Expand Up @@ -530,21 +529,17 @@ impl YamlParseableValue for Gui {
deposit_token = token.map(|token| Arc::new(token.clone()));
}

let presets = require_vec(
deposit_value,
"presets",
Some(format!(
"presets list missing for deposit index: {deposit_index} in gui deployment: {deployment_name}",
)),
)?
.iter()
.enumerate()
.map(|(preset_index, preset_yaml)| {
Ok(preset_yaml.as_str().ok_or(YamlError::ParseError(format!(
"preset value must be a string for preset list index: {preset_index} for deposit index: {deposit_index} in gui deployment: {deployment_name}",
)))?.to_string())
})
.collect::<Result<Vec<_>, YamlError>>()?;
let presets = match optional_vec(deposit_value, "presets") {
Some(presets) => Some(presets.iter()
.enumerate()
.map(|(preset_index, preset_yaml)| {
Ok(preset_yaml.as_str().ok_or(YamlError::ParseError(format!(
"preset value must be a string for preset list index: {preset_index} for deposit index: {deposit_index} in gui deployment: {deployment_name}",
)))?.to_string())
})
.collect::<Result<Vec<_>, YamlError>>()?),
None => None,
};

let gui_deposit = GuiDeposit {
token: deposit_token,
Expand Down Expand Up @@ -663,7 +658,7 @@ mod tests {
description: "test-deployment-description".to_string(),
deposits: vec![GuiDepositSource {
token: "test-token".to_string(),
presets: vec!["1.3".to_string(), "2.7".to_string()],
presets: Some(vec!["1.3".to_string(), "2.7".to_string()]),
}],
fields: vec![
GuiFieldDefinitionSource {
Expand Down Expand Up @@ -762,9 +757,10 @@ mod tests {
deposit.token.as_ref().unwrap().label,
Some("test-token".to_string())
);
assert_eq!(deposit.presets.len(), 2);
assert_eq!(deposit.presets[0], "1.3".to_string());
assert_eq!(deposit.presets[1], "2.7".to_string());
let presets = deposit.presets.as_ref().unwrap();
assert_eq!(presets.len(), 2);
assert_eq!(presets[0], "1.3".to_string());
assert_eq!(presets[1], "2.7".to_string());
assert_eq!(deployment.fields.len(), 3);
let field1 = &deployment.fields[0];
assert_eq!(field1.binding, "test-binding");
Expand Down Expand Up @@ -1157,30 +1153,6 @@ gui:

let yaml = r#"
gui:
name: test
description: test
deployments:
deployment1:
name: test
description: test
deposits:
- token: token1
"#;
let error = Gui::parse_from_yaml_optional(
vec![get_document(&format!("{yaml_prefix}{yaml}"))],
None,
)
.unwrap_err();
assert_eq!(
error,
YamlError::ParseError(
"presets list missing for deposit index: 0 in gui deployment: deployment1"
.to_string()
)
);

let yaml = r#"
gui:
name: test
description: test
deployments:
Expand Down
7 changes: 4 additions & 3 deletions crates/settings/src/yaml/dotrain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -372,9 +372,10 @@ mod tests {
*deposit.token.as_ref().unwrap(),
ob_yaml.get_token("token1").unwrap().into()
);
assert_eq!(deposit.presets.len(), 2);
assert_eq!(deposit.presets[0], "100".to_string());
assert_eq!(deposit.presets[1], "2000".to_string());
let presets = deposit.presets.as_ref().unwrap();
assert_eq!(presets.len(), 2);
assert_eq!(presets[0], "100".to_string());
assert_eq!(presets[1], "2000".to_string());
assert_eq!(deployment.fields.len(), 1);
let field = &deployment.fields[0];
assert_eq!(field.binding, "key1");
Expand Down

0 comments on commit f9f4ef8

Please sign in to comment.