build(deps): update toml crates (#4853)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This commit is contained in:
parent
22111c8778
commit
645a439c0b
|
@ -2249,7 +2249,7 @@ checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"toml",
|
"toml 0.5.11",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2650,6 +2650,15 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_spanned"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2c68e921cef53841b8925c2abadd27c9b891d9613bdc43d6b823062866df38e8"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha1"
|
name = "sha1"
|
||||||
version = "0.10.5"
|
version = "0.10.5"
|
||||||
|
@ -2833,7 +2842,7 @@ dependencies = [
|
||||||
"systemstat",
|
"systemstat",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"terminal_size",
|
"terminal_size",
|
||||||
"toml",
|
"toml 0.6.0",
|
||||||
"toml_edit",
|
"toml_edit",
|
||||||
"unicode-segmentation",
|
"unicode-segmentation",
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
|
@ -3083,25 +3092,41 @@ version = "0.5.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap",
|
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_datetime"
|
name = "toml"
|
||||||
version = "0.5.0"
|
version = "0.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "808b51e57d0ef8f71115d8f3a01e7d3750d01c79cac4b3eda910f4389fdf92fd"
|
checksum = "4fb9d890e4dc9298b70f740f615f2e05b9db37dce531f6b24fb77ac993f9f217"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"serde",
|
||||||
|
"serde_spanned",
|
||||||
|
"toml_datetime",
|
||||||
|
"toml_edit",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml_datetime"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_edit"
|
name = "toml_edit"
|
||||||
version = "0.17.1"
|
version = "0.18.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a34cc558345efd7e88b9eda9626df2138b80bb46a7606f695e751c892bc7dac6"
|
checksum = "729bfd096e40da9c001f778f5cdecbd2957929a24e10e5883d9392220a751581"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"itertools",
|
|
||||||
"nom8",
|
"nom8",
|
||||||
|
"serde",
|
||||||
|
"serde_spanned",
|
||||||
"toml_datetime",
|
"toml_datetime",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -3618,7 +3643,7 @@ version = "0.1.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
|
checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"toml",
|
"toml 0.5.11",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -80,8 +80,8 @@ starship-battery = { version = "0.7.9", optional = true }
|
||||||
strsim = "0.10.0"
|
strsim = "0.10.0"
|
||||||
systemstat = "=0.2.3"
|
systemstat = "=0.2.3"
|
||||||
terminal_size = "0.2.3"
|
terminal_size = "0.2.3"
|
||||||
toml = { version = "0.5.11", features = ["preserve_order"] }
|
toml = { version = "0.6.0", features = ["preserve_order"] }
|
||||||
toml_edit = "0.17.1"
|
toml_edit = "0.18.0"
|
||||||
unicode-segmentation = "1.10.0"
|
unicode-segmentation = "1.10.0"
|
||||||
unicode-width = "0.1.10"
|
unicode-width = "0.1.10"
|
||||||
urlencoding = "2.1.2"
|
urlencoding = "2.1.2"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::configs::Palette;
|
use crate::configs::Palette;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::serde_utils::ValueDeserializer;
|
use crate::serde_utils::{ValueDeserializer, ValueRef};
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
use nu_ansi_term::Color;
|
use nu_ansi_term::Color;
|
||||||
use serde::{
|
use serde::{
|
||||||
|
@ -22,12 +22,12 @@ where
|
||||||
E: SerdeError,
|
E: SerdeError,
|
||||||
{
|
{
|
||||||
/// Construct a `ModuleConfig` from a toml value.
|
/// Construct a `ModuleConfig` from a toml value.
|
||||||
fn from_config(config: &'a Value) -> Result<Self, E>;
|
fn from_config<V: Into<ValueRef<'a>>>(config: V) -> Result<Self, E>;
|
||||||
|
|
||||||
/// Loads the TOML value into the config.
|
/// Loads the TOML value into the config.
|
||||||
/// Missing values are set to their default values.
|
/// Missing values are set to their default values.
|
||||||
/// On error, logs an error message.
|
/// On error, logs an error message.
|
||||||
fn load(config: &'a Value) -> Self {
|
fn load<V: Into<ValueRef<'a>>>(config: V) -> Self {
|
||||||
match Self::from_config(config) {
|
match Self::from_config(config) {
|
||||||
Ok(config) => config,
|
Ok(config) => config,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -39,14 +39,15 @@ where
|
||||||
|
|
||||||
/// Helper function that will call `ModuleConfig::from_config(config) if config is Some,
|
/// Helper function that will call `ModuleConfig::from_config(config) if config is Some,
|
||||||
/// or `ModuleConfig::default()` if config is None.
|
/// or `ModuleConfig::default()` if config is None.
|
||||||
fn try_load(config: Option<&'a Value>) -> Self {
|
fn try_load<V: Into<ValueRef<'a>>>(config: Option<V>) -> Self {
|
||||||
config.map(Self::load).unwrap_or_default()
|
config.map(Into::into).map(Self::load).unwrap_or_default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T: Deserialize<'a> + Default> ModuleConfig<'a, ValueError> for T {
|
impl<'a, T: Deserialize<'a> + Default> ModuleConfig<'a, ValueError> for T {
|
||||||
/// Create `ValueDeserializer` wrapper and use it to call `Deserialize::deserialize` on it.
|
/// Create `ValueDeserializer` wrapper and use it to call `Deserialize::deserialize` on it.
|
||||||
fn from_config(config: &'a Value) -> Result<Self, ValueError> {
|
fn from_config<V: Into<ValueRef<'a>>>(config: V) -> Result<Self, ValueError> {
|
||||||
|
let config = config.into();
|
||||||
let deserializer = ValueDeserializer::new(config);
|
let deserializer = ValueDeserializer::new(config);
|
||||||
T::deserialize(deserializer).or_else(|err| {
|
T::deserialize(deserializer).or_else(|err| {
|
||||||
// If the error is an unrecognized key, print a warning and run
|
// If the error is an unrecognized key, print a warning and run
|
||||||
|
@ -114,8 +115,9 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Root config of starship.
|
/// Root config of starship.
|
||||||
|
#[derive(Default)]
|
||||||
pub struct StarshipConfig {
|
pub struct StarshipConfig {
|
||||||
pub config: Option<Value>,
|
pub config: Option<toml::Table>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_config_path() -> Option<String> {
|
pub fn get_config_path() -> Option<String> {
|
||||||
|
@ -136,19 +138,15 @@ pub fn get_config_path() -> Option<String> {
|
||||||
impl StarshipConfig {
|
impl StarshipConfig {
|
||||||
/// Initialize the Config struct
|
/// Initialize the Config struct
|
||||||
pub fn initialize() -> Self {
|
pub fn initialize() -> Self {
|
||||||
if let Some(file_data) = Self::config_from_file() {
|
Self::config_from_file()
|
||||||
Self {
|
.map(|config| Self {
|
||||||
config: Some(file_data),
|
config: Some(config),
|
||||||
}
|
})
|
||||||
} else {
|
.unwrap_or_default()
|
||||||
Self {
|
|
||||||
config: Some(Value::Table(toml::value::Table::new())),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a config from a starship configuration file
|
/// Create a config from a starship configuration file
|
||||||
fn config_from_file() -> Option<Value> {
|
fn config_from_file() -> Option<toml::Table> {
|
||||||
let file_path = get_config_path()?;
|
let file_path = get_config_path()?;
|
||||||
|
|
||||||
let toml_content = match utils::read_file(file_path) {
|
let toml_content = match utils::read_file(file_path) {
|
||||||
|
@ -195,7 +193,7 @@ impl StarshipConfig {
|
||||||
|
|
||||||
/// Get the value of the config in a specific path
|
/// Get the value of the config in a specific path
|
||||||
pub fn get_config(&self, path: &[&str]) -> Option<&Value> {
|
pub fn get_config(&self, path: &[&str]) -> Option<&Value> {
|
||||||
let mut prev_table = self.config.as_ref()?.as_table()?;
|
let mut prev_table = self.config.as_ref()?;
|
||||||
|
|
||||||
assert_ne!(
|
assert_ne!(
|
||||||
path.len(),
|
path.len(),
|
||||||
|
|
|
@ -11,7 +11,6 @@ use crate::configs::PROMPT_ORDER;
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use toml::Value;
|
|
||||||
use toml_edit::Document;
|
use toml_edit::Document;
|
||||||
|
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
|
@ -218,7 +217,7 @@ fn handle_toggle_configuration(doc: &mut Document, name: &str, key: &str) -> Res
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_configuration() -> Value {
|
pub fn get_configuration() -> toml::Table {
|
||||||
let starship_config = StarshipConfig::initialize();
|
let starship_config = StarshipConfig::initialize();
|
||||||
|
|
||||||
starship_config
|
starship_config
|
||||||
|
@ -427,7 +426,7 @@ mod tests {
|
||||||
ok = true
|
ok = true
|
||||||
};
|
};
|
||||||
let actual_config = extract_toml_paths(
|
let actual_config = extract_toml_paths(
|
||||||
config,
|
toml::Value::Table(config),
|
||||||
&[
|
&[
|
||||||
"extract_root".to_owned(),
|
"extract_root".to_owned(),
|
||||||
"extract_section".to_owned(),
|
"extract_section".to_owned(),
|
||||||
|
@ -435,7 +434,7 @@ mod tests {
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(expected_config, actual_config);
|
assert_eq!(toml::Value::Table(expected_config), actual_config);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_doc() -> Document {
|
fn create_doc() -> Document {
|
||||||
|
|
|
@ -309,7 +309,7 @@ mod tests {
|
||||||
|
|
||||||
fn expect_hg_branch_with_config(
|
fn expect_hg_branch_with_config(
|
||||||
repo_dir: &Path,
|
repo_dir: &Path,
|
||||||
config: Option<toml::Value>,
|
config: Option<toml::Table>,
|
||||||
expectations: &[Expect],
|
expectations: &[Expect],
|
||||||
) {
|
) {
|
||||||
let actual = ModuleRenderer::new("hg_branch")
|
let actual = ModuleRenderer::new("hg_branch")
|
||||||
|
|
|
@ -352,7 +352,7 @@ users: []
|
||||||
dir.close()
|
dir.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn base_test_ctx_alias(ctx_name: &str, config: toml::Value, expected: &str) -> io::Result<()> {
|
fn base_test_ctx_alias(ctx_name: &str, config: toml::Table, expected: &str) -> io::Result<()> {
|
||||||
let dir = tempfile::tempdir()?;
|
let dir = tempfile::tempdir()?;
|
||||||
|
|
||||||
let filename = dir.path().join("config");
|
let filename = dir.path().join("config");
|
||||||
|
@ -657,7 +657,7 @@ users: []
|
||||||
|
|
||||||
fn base_test_user_alias(
|
fn base_test_user_alias(
|
||||||
user_name: &str,
|
user_name: &str,
|
||||||
config: toml::Value,
|
config: toml::Table,
|
||||||
expected: &str,
|
expected: &str,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
let dir = tempfile::tempdir()?;
|
let dir = tempfile::tempdir()?;
|
||||||
|
|
|
@ -128,7 +128,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn get_symbol_default() {
|
fn get_symbol_default() {
|
||||||
let config = OSConfig::try_load(None);
|
let config = OSConfig::default();
|
||||||
|
|
||||||
let type_expected_pairs = [
|
let type_expected_pairs = [
|
||||||
(Type::Alpine, Some("🏔️ ")),
|
(Type::Alpine, Some("🏔️ ")),
|
||||||
|
|
|
@ -68,7 +68,7 @@ fn get_node_package_version(context: &Context, config: &PackageConfig) -> Option
|
||||||
Some(formatted_version)
|
Some(formatted_version)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_poetry_version(pyproject: &toml::Value) -> Option<&str> {
|
fn get_poetry_version(pyproject: &toml::Table) -> Option<&str> {
|
||||||
pyproject
|
pyproject
|
||||||
.get("tool")?
|
.get("tool")?
|
||||||
.get("poetry")?
|
.get("poetry")?
|
||||||
|
@ -76,13 +76,13 @@ fn get_poetry_version(pyproject: &toml::Value) -> Option<&str> {
|
||||||
.as_str()
|
.as_str()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_pep621_version(pyproject: &toml::Value) -> Option<&str> {
|
fn get_pep621_version(pyproject: &toml::Table) -> Option<&str> {
|
||||||
pyproject.get("project")?.get("version")?.as_str()
|
pyproject.get("project")?.get("version")?.as_str()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_pyproject_version(context: &Context, config: &PackageConfig) -> Option<String> {
|
fn get_pyproject_version(context: &Context, config: &PackageConfig) -> Option<String> {
|
||||||
let file_contents = context.read_file_from_pwd("pyproject.toml")?;
|
let file_contents = context.read_file_from_pwd("pyproject.toml")?;
|
||||||
let pyproject_toml: toml::Value = toml::from_str(&file_contents).ok()?;
|
let pyproject_toml: toml::Table = toml::from_str(&file_contents).ok()?;
|
||||||
|
|
||||||
get_pep621_version(&pyproject_toml)
|
get_pep621_version(&pyproject_toml)
|
||||||
.or_else(|| get_poetry_version(&pyproject_toml))
|
.or_else(|| get_poetry_version(&pyproject_toml))
|
||||||
|
@ -127,7 +127,7 @@ fn get_composer_version(context: &Context, config: &PackageConfig) -> Option<Str
|
||||||
|
|
||||||
fn get_julia_project_version(context: &Context, config: &PackageConfig) -> Option<String> {
|
fn get_julia_project_version(context: &Context, config: &PackageConfig) -> Option<String> {
|
||||||
let file_contents = context.read_file_from_pwd("Project.toml")?;
|
let file_contents = context.read_file_from_pwd("Project.toml")?;
|
||||||
let project_toml: toml::Value = toml::from_str(&file_contents).ok()?;
|
let project_toml: toml::Table = toml::from_str(&file_contents).ok()?;
|
||||||
let raw_version = project_toml.get("version")?.as_str()?;
|
let raw_version = project_toml.get("version")?.as_str()?;
|
||||||
|
|
||||||
format_version(raw_version, config.version_format)
|
format_version(raw_version, config.version_format)
|
||||||
|
@ -225,7 +225,7 @@ fn get_sbt_version(context: &Context, config: &PackageConfig) -> Option<String>
|
||||||
fn get_cargo_version(context: &Context, config: &PackageConfig) -> Option<String> {
|
fn get_cargo_version(context: &Context, config: &PackageConfig) -> Option<String> {
|
||||||
let mut file_contents = context.read_file_from_pwd("Cargo.toml")?;
|
let mut file_contents = context.read_file_from_pwd("Cargo.toml")?;
|
||||||
|
|
||||||
let mut cargo_toml: toml::Value = toml::from_str(&file_contents).ok()?;
|
let mut cargo_toml: toml::Table = toml::from_str(&file_contents).ok()?;
|
||||||
let cargo_version = cargo_toml.get("package").and_then(|p| p.get("version"));
|
let cargo_version = cargo_toml.get("package").and_then(|p| p.get("version"));
|
||||||
let raw_version = if let Some(v) = cargo_version.and_then(toml::Value::as_str) {
|
let raw_version = if let Some(v) = cargo_version.and_then(toml::Value::as_str) {
|
||||||
// regular version string
|
// regular version string
|
||||||
|
@ -1416,7 +1416,7 @@ environment:
|
||||||
file.sync_all()
|
file.sync_all()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn expect_output(project_dir: &TempDir, contains: Option<&str>, config: Option<toml::Value>) {
|
fn expect_output(project_dir: &TempDir, contains: Option<&str>, config: Option<toml::Table>) {
|
||||||
let starship_config = config.unwrap_or(toml::toml! {
|
let starship_config = config.unwrap_or(toml::toml! {
|
||||||
[package]
|
[package]
|
||||||
disabled = false
|
disabled = false
|
||||||
|
|
|
@ -164,7 +164,7 @@ mod tests {
|
||||||
|
|
||||||
fn expect_pijul_with_config(
|
fn expect_pijul_with_config(
|
||||||
repo_dir: &Path,
|
repo_dir: &Path,
|
||||||
config: Option<toml::Value>,
|
config: Option<toml::Table>,
|
||||||
expectations: &[Expect],
|
expectations: &[Expect],
|
||||||
) {
|
) {
|
||||||
let actual = ModuleRenderer::new("pijul_channel")
|
let actual = ModuleRenderer::new("pijul_channel")
|
||||||
|
|
|
@ -424,7 +424,7 @@ prompt = '(foo)'
|
||||||
dir.close()
|
dir.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_python2_renders(dir: &tempfile::TempDir, starship_config: Option<toml::Value>) {
|
fn check_python2_renders(dir: &tempfile::TempDir, starship_config: Option<toml::Table>) {
|
||||||
let config = starship_config.unwrap_or(toml::toml! {
|
let config = starship_config.unwrap_or(toml::toml! {
|
||||||
[python]
|
[python]
|
||||||
python_binary = "python2"
|
python_binary = "python2"
|
||||||
|
@ -439,7 +439,7 @@ prompt = '(foo)'
|
||||||
assert_eq!(expected, actual);
|
assert_eq!(expected, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_python3_renders(dir: &tempfile::TempDir, starship_config: Option<toml::Value>) {
|
fn check_python3_renders(dir: &tempfile::TempDir, starship_config: Option<toml::Table>) {
|
||||||
let config = starship_config.unwrap_or(toml::toml! {
|
let config = starship_config.unwrap_or(toml::toml! {
|
||||||
[python]
|
[python]
|
||||||
python_binary = "python3"
|
python_binary = "python3"
|
||||||
|
@ -456,7 +456,7 @@ prompt = '(foo)'
|
||||||
|
|
||||||
fn check_multiple_binaries_renders(
|
fn check_multiple_binaries_renders(
|
||||||
dir: &tempfile::TempDir,
|
dir: &tempfile::TempDir,
|
||||||
starship_config: Option<toml::Value>,
|
starship_config: Option<toml::Table>,
|
||||||
) {
|
) {
|
||||||
let config = starship_config.unwrap_or(toml::toml! {
|
let config = starship_config.unwrap_or(toml::toml! {
|
||||||
[python]
|
[python]
|
||||||
|
@ -472,7 +472,7 @@ prompt = '(foo)'
|
||||||
assert_eq!(expected, actual);
|
assert_eq!(expected, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_pyenv_renders(dir: &tempfile::TempDir, starship_config: Option<toml::Value>) {
|
fn check_pyenv_renders(dir: &tempfile::TempDir, starship_config: Option<toml::Table>) {
|
||||||
let config = starship_config.unwrap_or(toml::toml! {
|
let config = starship_config.unwrap_or(toml::toml! {
|
||||||
[python]
|
[python]
|
||||||
pyenv_version_name = true
|
pyenv_version_name = true
|
||||||
|
|
|
@ -6,11 +6,43 @@ use serde::de::{
|
||||||
use std::{cmp::Ordering, fmt};
|
use std::{cmp::Ordering, fmt};
|
||||||
use toml::Value;
|
use toml::Value;
|
||||||
|
|
||||||
|
/// A `toml::Value` that borrows its contents instead of owning them.
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub enum ValueRef<'a> {
|
||||||
|
Boolean(bool),
|
||||||
|
Integer(i64),
|
||||||
|
Float(f64),
|
||||||
|
String(&'a str),
|
||||||
|
Datetime(&'a toml::value::Datetime),
|
||||||
|
Array(&'a [Value]),
|
||||||
|
Table(&'a toml::map::Map<String, Value>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> From<&'de Value> for ValueRef<'de> {
|
||||||
|
fn from(value: &'de Value) -> Self {
|
||||||
|
match value {
|
||||||
|
Value::Boolean(b) => ValueRef::Boolean(*b),
|
||||||
|
Value::Integer(i) => ValueRef::Integer(*i),
|
||||||
|
Value::Float(f) => ValueRef::Float(*f),
|
||||||
|
Value::String(s) => ValueRef::String(s),
|
||||||
|
Value::Array(a) => ValueRef::Array(a),
|
||||||
|
Value::Table(t) => ValueRef::Table(t),
|
||||||
|
Value::Datetime(d) => ValueRef::Datetime(d),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> From<&'de toml::Table> for ValueRef<'de> {
|
||||||
|
fn from(value: &'de toml::Table) -> Self {
|
||||||
|
ValueRef::Table(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A helper struct for deserializing a TOML value references with serde.
|
/// A helper struct for deserializing a TOML value references with serde.
|
||||||
/// This also prints a warning and suggestions if a key is unknown.
|
/// This also prints a warning and suggestions if a key is unknown.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ValueDeserializer<'de> {
|
pub struct ValueDeserializer<'de> {
|
||||||
value: &'de Value,
|
value: ValueRef<'de>,
|
||||||
info: Option<StructInfo>,
|
info: Option<StructInfo>,
|
||||||
current_key: Option<&'de str>,
|
current_key: Option<&'de str>,
|
||||||
error_on_ignored: bool,
|
error_on_ignored: bool,
|
||||||
|
@ -24,9 +56,9 @@ struct StructInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de> ValueDeserializer<'de> {
|
impl<'de> ValueDeserializer<'de> {
|
||||||
pub fn new(value: &'de Value) -> Self {
|
pub fn new<T: Into<ValueRef<'de>>>(value: T) -> Self {
|
||||||
ValueDeserializer {
|
ValueDeserializer {
|
||||||
value,
|
value: value.into(),
|
||||||
info: None,
|
info: None,
|
||||||
current_key: None,
|
current_key: None,
|
||||||
error_on_ignored: true,
|
error_on_ignored: true,
|
||||||
|
@ -34,7 +66,7 @@ impl<'de> ValueDeserializer<'de> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn with_info(
|
fn with_info(
|
||||||
value: &'de Value,
|
value: ValueRef<'de>,
|
||||||
info: Option<StructInfo>,
|
info: Option<StructInfo>,
|
||||||
current_key: &'de str,
|
current_key: &'de str,
|
||||||
ignored: bool,
|
ignored: bool,
|
||||||
|
@ -86,20 +118,20 @@ impl<'de> Deserializer<'de> for ValueDeserializer<'de> {
|
||||||
V: Visitor<'de>,
|
V: Visitor<'de>,
|
||||||
{
|
{
|
||||||
match self.value {
|
match self.value {
|
||||||
Value::Boolean(b) => visitor.visit_bool(*b),
|
ValueRef::Boolean(b) => visitor.visit_bool(b),
|
||||||
Value::Integer(i) => visitor.visit_i64(*i),
|
ValueRef::Integer(i) => visitor.visit_i64(i),
|
||||||
Value::Float(f) => visitor.visit_f64(*f),
|
ValueRef::Float(f) => visitor.visit_f64(f),
|
||||||
Value::String(s) => visitor.visit_borrowed_str(s),
|
ValueRef::String(s) => visitor.visit_borrowed_str(s),
|
||||||
Value::Array(a) => {
|
ValueRef::Array(a) => {
|
||||||
let seq = SeqDeserializer::new(a.iter().map(ValueDeserializer::new));
|
let seq = SeqDeserializer::new(a.iter().map(ValueDeserializer::new));
|
||||||
seq.deserialize_seq(visitor)
|
seq.deserialize_seq(visitor)
|
||||||
}
|
}
|
||||||
Value::Table(t) => {
|
ValueRef::Table(t) => {
|
||||||
let map = MapDeserializer::new(t.iter().map(|(k, v)| {
|
let map = MapDeserializer::new(t.iter().map(|(k, v)| {
|
||||||
(
|
(
|
||||||
k.as_str(),
|
k.as_str(),
|
||||||
ValueDeserializer::with_info(
|
ValueDeserializer::with_info(
|
||||||
v,
|
v.into(),
|
||||||
self.info,
|
self.info,
|
||||||
k.as_str(),
|
k.as_str(),
|
||||||
self.error_on_ignored,
|
self.error_on_ignored,
|
||||||
|
@ -108,7 +140,7 @@ impl<'de> Deserializer<'de> for ValueDeserializer<'de> {
|
||||||
}));
|
}));
|
||||||
map.deserialize_map(visitor)
|
map.deserialize_map(visitor)
|
||||||
}
|
}
|
||||||
Value::Datetime(d) => visitor.visit_string(d.to_string()),
|
ValueRef::Datetime(d) => visitor.visit_string(d.to_string()),
|
||||||
}
|
}
|
||||||
.map_err(|e| self.error(e))
|
.map_err(|e| self.error(e))
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@ impl<'a> ModuleRenderer<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the config of the underlying context
|
/// Sets the config of the underlying context
|
||||||
pub fn config(mut self, config: toml::Value) -> Self {
|
pub fn config(mut self, config: toml::Table) -> Self {
|
||||||
self.context.root_config = StarshipRootConfig::load(&config);
|
self.context.root_config = StarshipRootConfig::load(&config);
|
||||||
self.context.config = StarshipConfig {
|
self.context.config = StarshipConfig {
|
||||||
config: Some(config),
|
config: Some(config),
|
||||||
|
|
Loading…
Reference in New Issue