tangled
alpha
login
or
join now
sachy.dev
/
sachy-embed-core
0
fork
atom
Repo of no-std crates for my personal embedded projects
0
fork
atom
overview
issues
pulls
pipelines
Yeet facet AND kdl, return to toml
sachy.dev
2 months ago
ddd97963
07539b3e
2/2
miri.yml
success
1min 54s
test.yml
success
1min 53s
+126
-319
3 changed files
expand all
collapse all
unified
split
Cargo.lock
sachy-config
Cargo.toml
src
lib.rs
+41
-231
Cargo.lock
···
464
464
]
465
465
466
466
[[package]]
467
467
-
name = "facet"
468
468
-
version = "0.34.0"
469
469
-
source = "registry+https://github.com/rust-lang/crates.io-index"
470
470
-
checksum = "72ee49c69f8a398d01d9b160e3e6288c1a5f7d756e8377f0530bbb4019aa1616"
471
471
-
dependencies = [
472
472
-
"autocfg",
473
473
-
"facet-core",
474
474
-
"facet-macros",
475
475
-
"static_assertions",
476
476
-
]
477
477
-
478
478
-
[[package]]
479
479
-
name = "facet-core"
480
480
-
version = "0.34.0"
481
481
-
source = "registry+https://github.com/rust-lang/crates.io-index"
482
482
-
checksum = "87ca85b6f8c289d86e5a0daa6b402ed1edf4001ad9b6ead357cc047fff680e0d"
483
483
-
dependencies = [
484
484
-
"autocfg",
485
485
-
"impls",
486
486
-
]
487
487
-
488
488
-
[[package]]
489
489
-
name = "facet-kdl"
490
490
-
version = "0.34.0"
491
491
-
source = "registry+https://github.com/rust-lang/crates.io-index"
492
492
-
checksum = "5b52d9f35c93a85109d9d1d9042fbc1b02972c28eaceb36374995e9d166f4019"
493
493
-
dependencies = [
494
494
-
"facet",
495
495
-
"facet-core",
496
496
-
"facet-reflect",
497
497
-
"facet-singularize",
498
498
-
"facet-solver",
499
499
-
"kdl",
500
500
-
"log",
501
501
-
"miette",
502
502
-
]
503
503
-
504
504
-
[[package]]
505
505
-
name = "facet-macro-parse"
506
506
-
version = "0.34.0"
507
507
-
source = "registry+https://github.com/rust-lang/crates.io-index"
508
508
-
checksum = "294183c810413075f9c3f075c0b3554d04ad06207dad18debc649a48779321f6"
509
509
-
dependencies = [
510
510
-
"facet-macro-types",
511
511
-
"proc-macro2",
512
512
-
"quote",
513
513
-
]
514
514
-
515
515
-
[[package]]
516
516
-
name = "facet-macro-types"
517
517
-
version = "0.34.0"
518
518
-
source = "registry+https://github.com/rust-lang/crates.io-index"
519
519
-
checksum = "8335dd3290eb5780aa40fb5b0da6c1a1c08980af6ada54c2e0d8cbbcd52b8f33"
520
520
-
dependencies = [
521
521
-
"proc-macro2",
522
522
-
"quote",
523
523
-
"unsynn",
524
524
-
]
525
525
-
526
526
-
[[package]]
527
527
-
name = "facet-macros"
528
528
-
version = "0.34.0"
529
529
-
source = "registry+https://github.com/rust-lang/crates.io-index"
530
530
-
checksum = "54f7c8e20f24f6c933290da20e76ce8b62a28ea7f16ea173a1aa21cb2ebf61f0"
531
531
-
dependencies = [
532
532
-
"facet-macros-impl",
533
533
-
]
534
534
-
535
535
-
[[package]]
536
536
-
name = "facet-macros-impl"
537
537
-
version = "0.34.0"
538
538
-
source = "registry+https://github.com/rust-lang/crates.io-index"
539
539
-
checksum = "fc36ba0859bb5fc539e9fb9ed4dab7a5af3b9dbf080e92adaeb5041c58971fcb"
540
540
-
dependencies = [
541
541
-
"facet-macro-parse",
542
542
-
"facet-macro-types",
543
543
-
"proc-macro2",
544
544
-
"quote",
545
545
-
"strsim",
546
546
-
"unsynn",
547
547
-
]
548
548
-
549
549
-
[[package]]
550
550
-
name = "facet-reflect"
551
551
-
version = "0.34.0"
552
552
-
source = "registry+https://github.com/rust-lang/crates.io-index"
553
553
-
checksum = "d6ab47f7ccaed7b782b4cdbfa3482f16720c0e7e31c38bf5f7da8b8f8c988690"
554
554
-
dependencies = [
555
555
-
"facet-core",
556
556
-
"miette",
557
557
-
]
558
558
-
559
559
-
[[package]]
560
560
-
name = "facet-singularize"
561
561
-
version = "0.34.0"
562
562
-
source = "registry+https://github.com/rust-lang/crates.io-index"
563
563
-
checksum = "cd14cadea48902b862d1f9256f1eac9102680d3fc105e5888008e219f2de6023"
564
564
-
565
565
-
[[package]]
566
566
-
name = "facet-solver"
567
567
-
version = "0.34.0"
568
568
-
source = "registry+https://github.com/rust-lang/crates.io-index"
569
569
-
checksum = "e7a23bcde5d4f562dfed81ca31c15c241536b1b6ef0a6e46cc17d8963b9f9f33"
570
570
-
dependencies = [
571
571
-
"facet-core",
572
572
-
"facet-reflect",
573
573
-
"strsim",
574
574
-
]
575
575
-
576
576
-
[[package]]
577
467
name = "fastrand"
578
468
version = "2.3.0"
579
469
source = "registry+https://github.com/rust-lang/crates.io-index"
···
734
624
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
735
625
736
626
[[package]]
737
737
-
name = "impls"
738
738
-
version = "1.0.3"
739
739
-
source = "registry+https://github.com/rust-lang/crates.io-index"
740
740
-
checksum = "7a46645bbd70538861a90d0f26c31537cdf1e44aae99a794fb75a664b70951bc"
741
741
-
742
742
-
[[package]]
743
627
name = "indexmap"
744
628
version = "2.12.1"
745
629
source = "registry+https://github.com/rust-lang/crates.io-index"
···
781
665
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
782
666
783
667
[[package]]
784
784
-
name = "kdl"
785
785
-
version = "6.5.0"
786
786
-
source = "registry+https://github.com/rust-lang/crates.io-index"
787
787
-
checksum = "81a29e7b50079ff44549f68c0becb1c73d7f6de2a4ea952da77966daf3d4761e"
788
788
-
dependencies = [
789
789
-
"miette",
790
790
-
"num",
791
791
-
"winnow 0.6.24",
792
792
-
]
793
793
-
794
794
-
[[package]]
795
668
name = "libc"
796
669
version = "0.2.179"
797
670
source = "registry+https://github.com/rust-lang/crates.io-index"
···
930
803
checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
931
804
932
805
[[package]]
933
933
-
name = "mutants"
934
934
-
version = "0.0.3"
935
935
-
source = "registry+https://github.com/rust-lang/crates.io-index"
936
936
-
checksum = "bc0287524726960e07b119cebd01678f852f147742ae0d925e6a520dca956126"
937
937
-
938
938
-
[[package]]
939
806
name = "nb"
940
807
version = "0.1.3"
941
808
source = "registry+https://github.com/rust-lang/crates.io-index"
···
988
855
]
989
856
990
857
[[package]]
991
991
-
name = "num"
992
992
-
version = "0.4.3"
993
993
-
source = "registry+https://github.com/rust-lang/crates.io-index"
994
994
-
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
995
995
-
dependencies = [
996
996
-
"num-bigint",
997
997
-
"num-complex",
998
998
-
"num-integer",
999
999
-
"num-iter",
1000
1000
-
"num-rational",
1001
1001
-
"num-traits",
1002
1002
-
]
1003
1003
-
1004
1004
-
[[package]]
1005
1005
-
name = "num-bigint"
1006
1006
-
version = "0.4.6"
1007
1007
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1008
1008
-
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
1009
1009
-
dependencies = [
1010
1010
-
"num-integer",
1011
1011
-
"num-traits",
1012
1012
-
]
1013
1013
-
1014
1014
-
[[package]]
1015
1015
-
name = "num-complex"
1016
1016
-
version = "0.4.6"
1017
1017
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1018
1018
-
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
1019
1019
-
dependencies = [
1020
1020
-
"num-traits",
1021
1021
-
]
1022
1022
-
1023
1023
-
[[package]]
1024
858
name = "num-derive"
1025
859
version = "0.4.2"
1026
860
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1032
866
]
1033
867
1034
868
[[package]]
1035
1035
-
name = "num-integer"
1036
1036
-
version = "0.1.46"
1037
1037
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1038
1038
-
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
1039
1039
-
dependencies = [
1040
1040
-
"num-traits",
1041
1041
-
]
1042
1042
-
1043
1043
-
[[package]]
1044
1044
-
name = "num-iter"
1045
1045
-
version = "0.1.45"
1046
1046
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1047
1047
-
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
1048
1048
-
dependencies = [
1049
1049
-
"autocfg",
1050
1050
-
"num-integer",
1051
1051
-
"num-traits",
1052
1052
-
]
1053
1053
-
1054
1054
-
[[package]]
1055
869
name = "num-modular"
1056
870
version = "0.6.1"
1057
871
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1064
878
checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6"
1065
879
dependencies = [
1066
880
"num-modular",
1067
1067
-
]
1068
1068
-
1069
1069
-
[[package]]
1070
1070
-
name = "num-rational"
1071
1071
-
version = "0.4.2"
1072
1072
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1073
1073
-
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
1074
1074
-
dependencies = [
1075
1075
-
"num-bigint",
1076
1076
-
"num-integer",
1077
1077
-
"num-traits",
1078
881
]
1079
882
1080
883
[[package]]
···
1352
1155
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
1353
1156
1354
1157
[[package]]
1355
1355
-
name = "rustc-hash"
1356
1356
-
version = "2.1.1"
1357
1357
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1358
1358
-
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
1359
1359
-
1360
1360
-
[[package]]
1361
1158
name = "rustix"
1362
1159
version = "0.38.44"
1363
1160
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1400
1197
name = "sachy-config"
1401
1198
version = "0.1.0"
1402
1199
dependencies = [
1403
1403
-
"facet",
1404
1404
-
"facet-kdl",
1405
1200
"miette",
1201
1201
+
"toml_edit",
1406
1202
]
1407
1203
1408
1204
[[package]]
···
1444
1240
"defmt 1.0.1",
1445
1241
"embassy-time",
1446
1242
"sachy-fmt",
1447
1447
-
"winnow 0.7.14",
1243
1243
+
"winnow",
1448
1244
]
1449
1245
1450
1246
[[package]]
···
1584
1380
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
1585
1381
1586
1382
[[package]]
1587
1587
-
name = "static_assertions"
1588
1588
-
version = "1.1.0"
1589
1589
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1590
1590
-
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
1591
1591
-
1592
1592
-
[[package]]
1593
1383
name = "strsim"
1594
1384
version = "0.11.1"
1595
1385
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1710
1500
]
1711
1501
1712
1502
[[package]]
1503
1503
+
name = "toml_datetime"
1504
1504
+
version = "0.7.5+spec-1.1.0"
1505
1505
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1506
1506
+
checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
1507
1507
+
dependencies = [
1508
1508
+
"serde_core",
1509
1509
+
]
1510
1510
+
1511
1511
+
[[package]]
1512
1512
+
name = "toml_edit"
1513
1513
+
version = "0.24.0+spec-1.1.0"
1514
1514
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1515
1515
+
checksum = "8c740b185920170a6d9191122cafef7010bd6270a3824594bff6784c04d7f09e"
1516
1516
+
dependencies = [
1517
1517
+
"indexmap",
1518
1518
+
"toml_datetime",
1519
1519
+
"toml_parser",
1520
1520
+
"toml_writer",
1521
1521
+
"winnow",
1522
1522
+
]
1523
1523
+
1524
1524
+
[[package]]
1525
1525
+
name = "toml_parser"
1526
1526
+
version = "1.0.6+spec-1.1.0"
1527
1527
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1528
1528
+
checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44"
1529
1529
+
dependencies = [
1530
1530
+
"winnow",
1531
1531
+
]
1532
1532
+
1533
1533
+
[[package]]
1534
1534
+
name = "toml_writer"
1535
1535
+
version = "1.0.6+spec-1.1.0"
1536
1536
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1537
1537
+
checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607"
1538
1538
+
1539
1539
+
[[package]]
1713
1540
name = "typenum"
1714
1541
version = "1.19.0"
1715
1542
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1753
1580
version = "0.2.2"
1754
1581
source = "registry+https://github.com/rust-lang/crates.io-index"
1755
1582
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
1756
1756
-
1757
1757
-
[[package]]
1758
1758
-
name = "unsynn"
1759
1759
-
version = "0.3.0"
1760
1760
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1761
1761
-
checksum = "501a7adf1a4bd9951501e5c66621e972ef8874d787628b7f90e64f936ef7ec0a"
1762
1762
-
dependencies = [
1763
1763
-
"mutants",
1764
1764
-
"proc-macro2",
1765
1765
-
"rustc-hash",
1766
1766
-
]
1767
1583
1768
1584
[[package]]
1769
1585
name = "version_check"
···
1984
1800
1985
1801
[[package]]
1986
1802
name = "winnow"
1987
1987
-
version = "0.6.24"
1803
1803
+
version = "0.7.14"
1988
1804
source = "registry+https://github.com/rust-lang/crates.io-index"
1989
1989
-
checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a"
1805
1805
+
checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
1990
1806
dependencies = [
1991
1807
"memchr",
1992
1808
]
1993
1993
-
1994
1994
-
[[package]]
1995
1995
-
name = "winnow"
1996
1996
-
version = "0.7.14"
1997
1997
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1998
1998
-
checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
1999
1809
2000
1810
[[package]]
2001
1811
name = "wit-bindgen"
+1
-2
sachy-config/Cargo.toml
···
8
8
rust-version.workspace = true
9
9
10
10
[dependencies]
11
11
-
facet = "0.34"
12
12
-
facet-kdl = "0.34"
11
11
+
toml_edit = "0.24.0"
13
12
miette = { version = "7", features = ["fancy"] }
+84
-86
sachy-config/src/lib.rs
···
1
1
use std::io::Write;
2
2
3
3
-
use facet::Facet;
4
4
-
use facet_kdl as kdl;
5
5
-
use miette::{IntoDiagnostic, Result};
3
3
+
use miette::{IntoDiagnostic, Result, miette};
6
4
7
7
-
#[derive(Facet, Default)]
8
8
-
#[facet(default)]
9
9
-
pub struct ConfigDoc {
10
10
-
#[facet(kdl::child, default)]
11
11
-
pub constants: Constants,
12
12
-
#[facet(kdl::child, default)]
13
13
-
pub statics: Statics,
14
14
-
}
5
5
+
pub fn output_config<W: Write>(config: &str, mut writer: W) -> Result<()> {
6
6
+
let output = parse_config(config)?;
15
7
16
16
-
#[derive(Facet, Default)]
17
17
-
#[facet(default)]
18
18
-
pub struct Statics {
19
19
-
#[facet(kdl::children, default)]
20
20
-
statics: Vec<Static>,
21
21
-
}
8
8
+
writer.write_all(output.as_bytes()).into_diagnostic()?;
22
9
23
23
-
#[derive(Facet, Default)]
24
24
-
#[facet(default)]
25
25
-
pub struct Constants {
26
26
-
#[facet(kdl::children, default)]
27
27
-
pub constants: Vec<Constant>,
28
28
-
}
29
29
-
30
30
-
#[derive(Facet)]
31
31
-
pub struct Static {
32
32
-
#[facet(kdl::node_name)]
33
33
-
pub name: String,
34
34
-
#[facet(kdl::argument)]
35
35
-
pub value: String,
36
36
-
}
37
37
-
38
38
-
#[derive(Facet)]
39
39
-
pub struct Constant {
40
40
-
#[facet(kdl::node_name)]
41
41
-
pub name: String,
42
42
-
#[facet(kdl::argument)]
43
43
-
pub kind: String,
44
44
-
#[facet(kdl::argument)]
45
45
-
pub value: String,
10
10
+
Ok(())
46
11
}
47
12
48
13
pub fn parse_config(config: &str) -> Result<String> {
49
49
-
let config_doc: ConfigDoc = kdl::from_str_owned(config)?;
14
14
+
let config_doc = config.parse::<toml_edit::DocumentMut>().into_diagnostic()?;
50
15
let mut output = String::new();
51
16
52
52
-
for static_value in config_doc.statics.statics.iter() {
53
53
-
let static_output = format!(
54
54
-
"pub static {}: &str = \"{}\";\n",
55
55
-
&static_value.name, &static_value.value
56
56
-
);
57
57
-
output.push_str(&static_output);
58
58
-
}
59
59
-
60
60
-
for constant_value in config_doc.constants.constants.iter() {
61
61
-
let constant_output = format!(
62
62
-
"pub const {}: {} = {};\n",
63
63
-
&constant_value.name, &constant_value.kind, &constant_value.value,
64
64
-
);
65
65
-
output.push_str(&constant_output);
66
66
-
}
67
67
-
68
68
-
Ok(output)
69
69
-
}
17
17
+
config_doc
18
18
+
.get("statics")
19
19
+
.and_then(|item| item.as_table())
20
20
+
.into_iter()
21
21
+
.flat_map(|statics| statics.iter())
22
22
+
.try_for_each(|(name, item)| -> miette::Result<()> {
23
23
+
let value = item.as_str().ok_or_else(|| {
24
24
+
miette!(
25
25
+
"{} is not a string value. Actual type: {}",
26
26
+
name,
27
27
+
item.type_name(),
28
28
+
)
29
29
+
})?;
30
30
+
let static_output = format!("pub static {}: &str = \"{}\";\n", name, value);
31
31
+
output.push_str(&static_output);
32
32
+
Ok(())
33
33
+
})?;
70
34
71
71
-
pub fn output_config<W: Write>(config: &str, mut writer: W) -> Result<()> {
72
72
-
let output = parse_config(config)?;
35
35
+
config_doc
36
36
+
.get("constants")
37
37
+
.and_then(|item| item.as_table())
38
38
+
.into_iter()
39
39
+
.flat_map(|constants| constants.iter())
40
40
+
.try_for_each(|(name, constant_value)| -> miette::Result<()> {
41
41
+
let kind = &constant_value["type"];
42
42
+
let kind = kind.as_str().ok_or_else(|| {
43
43
+
miette!(
44
44
+
"{} is not a string value. Actual type: {}",
45
45
+
name,
46
46
+
kind.type_name(),
47
47
+
)
48
48
+
})?;
49
49
+
let value = &constant_value["value"];
50
50
+
let value = value.as_value().ok_or_else(|| {
51
51
+
miette!(
52
52
+
"{} is not a value. Actual type: {}",
53
53
+
name,
54
54
+
value.type_name(),
55
55
+
)
56
56
+
})?;
73
57
74
74
-
writer.write_all(output.as_bytes()).into_diagnostic()?;
58
58
+
let constant_output = format!(
59
59
+
"pub const {}: {} = {};\n",
60
60
+
name,
61
61
+
kind,
62
62
+
value.clone().decorated("", "")
63
63
+
);
64
64
+
output.push_str(&constant_output);
65
65
+
Ok(())
66
66
+
})?;
75
67
76
76
-
Ok(())
68
68
+
Ok(output)
77
69
}
78
70
79
71
#[cfg(test)]
···
84
76
85
77
#[test]
86
78
fn it_parses_config() -> Result<()> {
87
87
-
let input = r#"constants {
88
88
-
FIRST "u8" "2"
89
89
-
VALUE "u64" "42"
90
90
-
}
91
91
-
statics {
92
92
-
EXAMPLE "thing"
93
93
-
}"#;
79
79
+
let input = r#"[constants]
80
80
+
FIRST = { type = "u8", value = 2 }
81
81
+
VALUE = { type = "f32", value = 42.0 }
82
82
+
[statics]
83
83
+
EXAMPLE = "thing"
84
84
+
"#;
94
85
let expected = r#"pub static EXAMPLE: &str = "thing";
95
86
pub const FIRST: u8 = 2;
96
96
-
pub const VALUE: u64 = 42;
87
87
+
pub const VALUE: f32 = 42.0;
97
88
"#;
98
89
99
90
let output = parse_config(input)?;
···
105
96
106
97
#[test]
107
98
fn it_handles_only_statics() -> Result<()> {
108
108
-
let input = r#"statics {
109
109
-
EXAMPLE "thing"
110
110
-
}"#;
99
99
+
let input = r#"[statics]
100
100
+
EXAMPLE = "thing"
101
101
+
"#;
111
102
112
103
let expected = "pub static EXAMPLE: &str = \"thing\";\n";
113
104
···
120
111
121
112
#[test]
122
113
fn it_handles_only_constants() -> Result<()> {
123
123
-
let input = r#"constants {
124
124
-
FIRST "u8" "42"
125
125
-
}"#;
114
114
+
let input = r#"[constants]
115
115
+
FIRST = { type = "u8", value = 42 }
116
116
+
"#;
126
117
127
118
let expected = "pub const FIRST: u8 = 42;\n";
128
119
···
135
126
136
127
#[test]
137
128
fn it_handles_empty_config() -> Result<()> {
138
138
-
let input = r#"statics {}
139
139
-
constants {}"#;
129
129
+
let input = r#"[statics]
130
130
+
[constants]"#;
131
131
+
132
132
+
let expected = "";
133
133
+
134
134
+
let output = parse_config(input)?;
135
135
+
136
136
+
assert_eq!(&output, expected);
137
137
+
138
138
+
let input = "";
140
139
141
140
let expected = "";
142
141
···
149
148
150
149
#[test]
151
150
fn it_outputs_to_file() -> Result<()> {
152
152
-
let input = r#"constants {
153
153
-
FIRST "u8" "2"
154
154
-
VALUE "u64" "42"
155
155
-
}
156
156
-
statics {
157
157
-
EXAMPLE "thing"
158
158
-
}"#;
151
151
+
let input = r#"[constants]
152
152
+
FIRST = { type = "u8", value = 2 }
153
153
+
VALUE = { type = "u64", value = 42 }
154
154
+
[statics]
155
155
+
EXAMPLE = "thing"
156
156
+
"#;
159
157
let expected = r#"pub static EXAMPLE: &str = "thing";
160
158
pub const FIRST: u8 = 2;
161
159
pub const VALUE: u64 = 42;