mirror of
https://github.com/a2x/cs2-dumper.git
synced 2025-10-08 02:00:02 +08:00
Add YAML file builder and automatically resolve offsets in tests
This commit is contained in:
@@ -43,8 +43,8 @@ impl FileBuilder for JsonFileBuilder {
|
||||
name: &str,
|
||||
comment: Option<&str>,
|
||||
) -> Result<()> {
|
||||
self.data.entry(name.to_string()).or_default().comment = comment.map(str::to_string);
|
||||
self.current_namespace = name.to_string();
|
||||
self.data.entry(name.to_string()).or_default().comment = comment.map(str::to_string);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ pub use file_builder::FileBuilder;
|
||||
pub use json_file_builder::JsonFileBuilder;
|
||||
pub use python_file_builder::PythonFileBuilder;
|
||||
pub use rust_file_builder::RustFileBuilder;
|
||||
pub use yaml_file_builder::YamlFileBuilder;
|
||||
|
||||
pub use std::io::{Result, Write};
|
||||
|
||||
@@ -13,6 +14,7 @@ pub mod file_builder;
|
||||
pub mod json_file_builder;
|
||||
pub mod python_file_builder;
|
||||
pub mod rust_file_builder;
|
||||
pub mod yaml_file_builder;
|
||||
|
||||
/// `FileBuilder` is an enum that defines different kinds of file builders.
|
||||
/// Each variant corresponds to a builder for a particular type of file.
|
||||
@@ -32,6 +34,9 @@ pub enum FileBuilderEnum {
|
||||
|
||||
/// Represents a builder for Rust files.
|
||||
RustFileBuilder(RustFileBuilder),
|
||||
|
||||
/// Represents a builder for YAML files.
|
||||
YamlFileBuilder(YamlFileBuilder),
|
||||
}
|
||||
|
||||
impl FileBuilder for FileBuilderEnum {
|
||||
@@ -77,6 +82,7 @@ impl FileBuilderEnum {
|
||||
FileBuilderEnum::JsonFileBuilder(builder) => builder,
|
||||
FileBuilderEnum::PythonFileBuilder(builder) => builder,
|
||||
FileBuilderEnum::RustFileBuilder(builder) => builder,
|
||||
FileBuilderEnum::YamlFileBuilder(builder) => builder,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
48
src/builder/yaml_file_builder.rs
Normal file
48
src/builder/yaml_file_builder.rs
Normal file
@@ -0,0 +1,48 @@
|
||||
use super::FileBuilder;
|
||||
|
||||
use std::io::{Result, Write};
|
||||
|
||||
/// A structure representing a builder for Yaml files.
|
||||
/// The builder implements the `FileBuilder` trait.
|
||||
#[derive(Clone, Debug, Default, PartialEq)]
|
||||
pub struct YamlFileBuilder;
|
||||
|
||||
impl FileBuilder for YamlFileBuilder {
|
||||
fn extension(&mut self) -> &str {
|
||||
"yaml"
|
||||
}
|
||||
|
||||
fn write_top_level(&mut self, output: &mut dyn Write) -> Result<()> {
|
||||
write!(output, "---\n")
|
||||
}
|
||||
|
||||
fn write_namespace(
|
||||
&mut self,
|
||||
output: &mut dyn Write,
|
||||
name: &str,
|
||||
comment: Option<&str>,
|
||||
) -> Result<()> {
|
||||
let comment = comment.map_or(String::new(), |c| format!(" # {}", c));
|
||||
|
||||
write!(output, "{}:{}\n", name, comment)
|
||||
}
|
||||
|
||||
fn write_variable(
|
||||
&mut self,
|
||||
output: &mut dyn Write,
|
||||
name: &str,
|
||||
value: usize,
|
||||
comment: Option<&str>,
|
||||
indentation: Option<usize>,
|
||||
) -> Result<()> {
|
||||
let indentation = " ".repeat(indentation.unwrap_or(4));
|
||||
|
||||
let comment = comment.map_or(String::new(), |c| format!(" # {}", c));
|
||||
|
||||
write!(output, "{}{}: {}{}\n", indentation, name, value, comment)
|
||||
}
|
||||
|
||||
fn write_closure(&mut self, _output: &mut dyn Write, _eof: bool) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user