fn try_from()

in src/settings/config.rs [77:122]


    fn try_from(value: &OwnedStruct) -> Result<Self, Self::Error> {
        let mut config = ShellConfig::default();

        if let Some(elem) = value.get("ui") {
            let ui = elem
                .as_struct()
                .ok_or(usage_error("`ui` should be a struct"))?;
            config.ui = UiConfig::try_from(ui)?;
        }

        if let Some(elem) = value.get("debug") {
            let debug = elem
                .as_struct()
                .ok_or(usage_error("`debug` should be a struct"))?;
            config.debug = DebugConfig::try_from(debug)?;
        }

        if let Some(elem) = value.get("default_ledger") {
            config.default_ledger = Some(
                elem.as_str()
                    .ok_or(usage_error("`default_ledger` should be a string"))?
                    .to_string(),
            );
        }

        if let Some(elem) = value.get("ledgers") {
            let ledgers = elem
                .as_sequence()
                .ok_or(usage_error("`ledgers` should be a list"))?;
            let deser: Result<Vec<_>, ShellError> = ledgers
                .iter()
                .map(|elem| {
                    let ledger = elem
                        .as_struct()
                        .ok_or(usage_error("`ledgers` should be a list of structs"))?;
                    LedgerConfig::try_from(ledger)
                })
                .collect();
            let deser = deser?;
            if !deser.is_empty() {
                config.ledgers = Some(deser);
            }
        }

        Ok(config)
    }