Skip to content

Commit db8fb5b

Browse files
committed
fixup! Add list scheme system
1 parent 0c2304c commit db8fb5b

File tree

9 files changed

+70
-33
lines changed

9 files changed

+70
-33
lines changed

Diff for: CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
## Unreleased
44

5+
### Added
6+
7+
- Add support for `list`, `listbase16` and `listbase24` scheme systems
8+
for use in the `templates/config.yaml` file to add a `schemes` list to
9+
mustache context to be able to list scheme information in a single
10+
file.
11+
512
### Changed
613

714
- Change `get_scheme_files` and `SchemeFile::new` type arguments from

Diff for: tinted-builder-rust/src/operations/build.rs

+29-18
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,28 @@ pub fn build(
110110
.clone()
111111
.unwrap_or(vec![SchemeSystem::default()]);
112112

113-
if supported_systems.contains(&SchemeSystem::List) {
113+
let list_systems: Vec<&SchemeSystem> = supported_systems
114+
.iter()
115+
.filter(|system| {
116+
matches!(
117+
system,
118+
SchemeSystem::List | SchemeSystem::ListBase16 | SchemeSystem::ListBase24
119+
)
120+
})
121+
.collect();
122+
123+
for system in &list_systems {
114124
render_list(
115125
&theme_template_path,
126+
system,
116127
(template_item_config_name, template_item_config_value),
117128
all_scheme_files.clone(),
118129
is_quiet,
119130
)?;
120-
} else {
131+
}
132+
133+
// Render list, otherwise generate
134+
if list_systems.is_empty() {
121135
let template_item_scheme_files: Vec<(PathBuf, Scheme)> = all_scheme_files
122136
.iter()
123137
.filter_map(|(path, scheme)| {
@@ -144,14 +158,11 @@ pub fn build(
144158

145159
fn render_list(
146160
template_path: impl AsRef<Path>,
161+
scheme_system: &SchemeSystem,
147162
(config_name, config_value): (&str, &TemplateConfig),
148163
all_scheme_files: Vec<(PathBuf, Scheme)>,
149164
is_quiet: bool,
150165
) -> Result<()> {
151-
let supported_systems = config_value
152-
.supported_systems
153-
.clone()
154-
.unwrap_or(vec![SchemeSystem::default()]);
155166
let filename = get_filename(config_value, is_quiet)?;
156167
let mustache_template_path = template_path
157168
.as_ref()
@@ -168,14 +179,18 @@ fn render_list(
168179
.into_iter()
169180
.filter_map(|(_, scheme)| match scheme {
170181
Scheme::Base16(scheme) => {
171-
if supported_systems.contains(&SchemeSystem::Base16) {
182+
if *scheme_system == SchemeSystem::List
183+
|| *scheme_system == SchemeSystem::ListBase16
184+
{
172185
Some(scheme)
173186
} else {
174187
None
175188
}
176189
}
177190
Scheme::Base24(scheme) => {
178-
if supported_systems.contains(&SchemeSystem::Base24) {
191+
if *scheme_system == SchemeSystem::List
192+
|| *scheme_system == SchemeSystem::ListBase24
193+
{
179194
Some(scheme)
180195
} else {
181196
None
@@ -187,7 +202,11 @@ fn render_list(
187202
);
188203
let data = serde_yaml::to_string(&data).unwrap_or_default();
189204
let output = ribboncurls::render(&template_content, &data, None)?;
190-
let parsed_filename = parse_filename(&template_path, &filename)?;
205+
let filepath = filename
206+
.replace("{{ scheme-system }}", &scheme_system.to_string())
207+
.replace("{{scheme-system}}", &scheme_system.to_string());
208+
209+
let parsed_filename = parse_filename(&template_path, &filepath)?;
191210
let output_path = parsed_filename.get_path();
192211

193212
if !parsed_filename.directory.exists() {
@@ -199,15 +218,7 @@ fn render_list(
199218
if !is_quiet {
200219
println!(
201220
"Successfully generated \"{}\" list with filename \"{}\"",
202-
supported_systems
203-
.iter()
204-
.filter_map(|item| if *item == SchemeSystem::List {
205-
None
206-
} else {
207-
Some(item.as_str().to_string())
208-
})
209-
.collect::<Vec<String>>()
210-
.join(", "),
221+
scheme_system,
211222
template_path.as_ref().join(filename).display(),
212223
);
213224
}

Diff for: tinted-builder-rust/tests/fixtures/rendered/list.md

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
base16-silk-light - variant: light
2+
base24-dracula - variant: dark
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
base16-silk-light - variant: light
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
base24-dracula - variant: dark
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
list:
2-
filename: list.md
3-
supported-systems: [list, base16]
1+
list:
2+
filename: "{{ scheme-system }}-list.md"
3+
supported-systems: [list, listbase16, listbase24]

Diff for: tinted-builder-rust/tests/operation_build.rs

+23-11
Original file line numberDiff line numberDiff line change
@@ -414,15 +414,17 @@ fn test_operation_build_mixed() -> Result<()> {
414414
}
415415

416416
#[test]
417-
fn test_operation_build_list() -> Result<()> {
417+
fn test_operation_build_listbase16() -> Result<()> {
418418
// -------
419419
// Arrange
420420
// -------
421421
let name = "operation_build_list";
422422
let template_theme_path = PathBuf::from(format!("./template-{}", name));
423423
let template_templates_path = template_theme_path.join("templates");
424424
let schemes_path = template_theme_path.join("schemes");
425-
let rendered_theme_path = template_theme_path.join("list.md");
425+
let rendered_list_theme_path = template_theme_path.join("list-list.md");
426+
let rendered_listbase16_theme_path = template_theme_path.join("listbase16-list.md");
427+
let rendered_listbase24_theme_path = template_theme_path.join("listbase24-list.md");
426428

427429
if template_theme_path.is_dir() {
428430
fs::remove_dir_all(&template_theme_path)?;
@@ -447,25 +449,35 @@ fn test_operation_build_list() -> Result<()> {
447449
format!("--schemes-dir={}", schemes_path.display()),
448450
])
449451
.unwrap();
450-
let rendered_content = fs::read_to_string(rendered_theme_path)?;
451-
let expected_content = fs::read_to_string("./tests/fixtures/rendered/list.md")?;
452+
let rendered_list_content = fs::read_to_string(rendered_list_theme_path)?;
453+
let rendered_listbase16_content = fs::read_to_string(rendered_listbase16_theme_path)?;
454+
let rendered_listbase24_content = fs::read_to_string(rendered_listbase24_theme_path)?;
455+
let expected_list_content = fs::read_to_string("./tests/fixtures/rendered/list.md")?;
456+
let expected_listbase16_content =
457+
fs::read_to_string("./tests/fixtures/rendered/listbase16.md")?;
458+
let expected_listbase24_content =
459+
fs::read_to_string("./tests/fixtures/rendered/listbase24.md")?;
452460

453461
// ------
454462
// Assert
455463
// ------
456-
assert_eq!(rendered_content, expected_content);
464+
assert_eq!(rendered_list_content, expected_list_content);
465+
assert_eq!(rendered_listbase16_content, expected_listbase16_content);
466+
assert_eq!(rendered_listbase24_content, expected_listbase24_content);
457467
assert!(
458468
stderr.is_empty(),
459469
"stderr does not contain the expected output"
460470
);
461-
assert_eq!(
462-
stdout,
463-
format!(
464-
"Successfully generated \"base16\" list with filename \"{}\"\n",
465-
template_theme_path.join("list.md").display()
466-
)
471+
let expected_output = format!(
472+
r#"Successfully generated "list" list with filename "{0}/{{{{ scheme-system }}}}-list.md"
473+
Successfully generated "listbase16" list with filename "{0}/{{{{ scheme-system }}}}-list.md"
474+
Successfully generated "listbase24" list with filename "{0}/{{{{ scheme-system }}}}-list.md"
475+
"#,
476+
template_theme_path.display(),
467477
);
468478

479+
assert_eq!(stdout, expected_output);
480+
469481
Ok(())
470482
}
471483

Diff for: tinted-builder/src/scheme.rs

+4
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ pub enum SchemeSystem {
8080
/// Base24 scheme system.
8181
Base24,
8282
List,
83+
ListBase16,
84+
ListBase24,
8385
}
8486

8587
impl SchemeSystem {
@@ -89,6 +91,8 @@ impl SchemeSystem {
8991
SchemeSystem::Base16 => "base16",
9092
SchemeSystem::Base24 => "base24",
9193
SchemeSystem::List => "list",
94+
SchemeSystem::ListBase16 => "listbase16",
95+
SchemeSystem::ListBase24 => "listbase24",
9296
}
9397
}
9498
pub fn variants() -> &'static [SchemeSystem] {

Diff for: tinted-builder/src/scheme/base16.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ impl<'de> Deserialize<'de> for Base16Scheme {
102102
)));
103103
}
104104
}
105-
SchemeSystem::List => {
105+
_ => {
106106
return Err(serde::de::Error::custom(format!(
107107
"{} is not a valid Scheme system for a specific scheme",
108108
wrapper.system

0 commit comments

Comments
 (0)