mirror of
				https://github.com/a2x/cs2-dumper.git
				synced 2025-11-04 09:50:33 +08:00 
			
		
		
		
	@@ -5,6 +5,7 @@ charset = utf-8
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
indent_size = 4
 | 
			
		||||
indent_style = space
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
 | 
			
		||||
[*.json]
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ use std::io::{Result, Write};
 | 
			
		||||
 | 
			
		||||
/// A structure representing a builder for C++ header files.
 | 
			
		||||
/// The builder implements the `FileBuilder` trait.
 | 
			
		||||
#[derive(Debug, PartialEq)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
pub struct CppFileBuilder;
 | 
			
		||||
 | 
			
		||||
impl FileBuilder for CppFileBuilder {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ use std::io::{Result, Write};
 | 
			
		||||
 | 
			
		||||
/// A structure representing a builder for C# files.
 | 
			
		||||
/// The builder implements the `FileBuilder` trait.
 | 
			
		||||
#[derive(Debug, PartialEq)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
pub struct CSharpFileBuilder;
 | 
			
		||||
 | 
			
		||||
impl FileBuilder for CSharpFileBuilder {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ use std::collections::BTreeMap;
 | 
			
		||||
use std::io::{Result, Write};
 | 
			
		||||
 | 
			
		||||
/// Represents a JSON offset value with an optional comment.
 | 
			
		||||
#[derive(Debug, PartialEq, Default, Serialize)]
 | 
			
		||||
#[derive(Clone, Debug, Default, PartialEq, Serialize)]
 | 
			
		||||
struct JsonOffsetValue {
 | 
			
		||||
    value: usize,
 | 
			
		||||
    comment: Option<String>,
 | 
			
		||||
@@ -14,7 +14,7 @@ struct JsonOffsetValue {
 | 
			
		||||
 | 
			
		||||
/// Represents a JSON module, which contains data in the form of a `BTreeMap` of string keys and
 | 
			
		||||
/// `JsonOffsetValue` values, as well as an optional comment.
 | 
			
		||||
#[derive(Debug, PartialEq, Default, Serialize)]
 | 
			
		||||
#[derive(Clone, Debug, Default, PartialEq, Serialize)]
 | 
			
		||||
struct JsonModule {
 | 
			
		||||
    data: BTreeMap<String, JsonOffsetValue>,
 | 
			
		||||
    comment: Option<String>,
 | 
			
		||||
@@ -22,7 +22,7 @@ struct JsonModule {
 | 
			
		||||
 | 
			
		||||
/// A structure representing a builder for JSON files.
 | 
			
		||||
/// The builder implements the `FileBuilder` trait.
 | 
			
		||||
#[derive(Debug, PartialEq, Default)]
 | 
			
		||||
#[derive(Clone, Debug, Default, PartialEq)]
 | 
			
		||||
pub struct JsonFileBuilder {
 | 
			
		||||
    data: BTreeMap<String, JsonModule>,
 | 
			
		||||
    current_namespace: String,
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ pub mod rust_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.
 | 
			
		||||
#[derive(Debug, PartialEq)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
pub enum FileBuilderEnum {
 | 
			
		||||
    /// Represents a builder for C++ header files.
 | 
			
		||||
    CppFileBuilder(CppFileBuilder),
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ use std::io::{Result, Write};
 | 
			
		||||
 | 
			
		||||
/// A structure representing a builder for Python files.
 | 
			
		||||
/// The builder implements the `FileBuilder` trait.
 | 
			
		||||
#[derive(Debug, PartialEq)]
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
pub struct PythonFileBuilder;
 | 
			
		||||
 | 
			
		||||
impl FileBuilder for PythonFileBuilder {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ use std::io::{Result, Write};
 | 
			
		||||
 | 
			
		||||
/// A structure representing a builder for Rust files.
 | 
			
		||||
/// The builder implements the `FileBuilder` trait.
 | 
			
		||||
#[derive(Debug, Default, PartialEq)]
 | 
			
		||||
#[derive(Clone, Debug, Default, PartialEq)]
 | 
			
		||||
pub struct RustFileBuilder;
 | 
			
		||||
 | 
			
		||||
impl FileBuilder for RustFileBuilder {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -42,17 +42,30 @@ struct Args {
 | 
			
		||||
    #[arg(short, long)]
 | 
			
		||||
    schemas: bool,
 | 
			
		||||
 | 
			
		||||
    /// Enable verbose output.
 | 
			
		||||
    #[arg(short, long)]
 | 
			
		||||
    verbose: bool,
 | 
			
		||||
    /// List of file builders to use.
 | 
			
		||||
    /// Valid values are: `.cs`, `.hpp`, `.json`, `.py`, `.rs`.
 | 
			
		||||
    #[arg(
 | 
			
		||||
        short,
 | 
			
		||||
        long,
 | 
			
		||||
        value_parser = parse_extension,
 | 
			
		||||
        value_delimiter = ',',
 | 
			
		||||
        default_values = [".cs", ".hpp", ".json", ".py", ".rs"],
 | 
			
		||||
    )]
 | 
			
		||||
    builders: Vec<FileBuilderEnum>,
 | 
			
		||||
 | 
			
		||||
    /// Output folder.
 | 
			
		||||
    /// Indentation level for generated files.
 | 
			
		||||
    /// Defaults to 4 spaces.
 | 
			
		||||
    #[arg(long, default_value_t = 4)]
 | 
			
		||||
    indent: usize,
 | 
			
		||||
 | 
			
		||||
    /// Output directory for generated files.
 | 
			
		||||
    /// Defaults to `generated`.
 | 
			
		||||
    #[arg(long, default_value = "generated")]
 | 
			
		||||
    output: String,
 | 
			
		||||
 | 
			
		||||
    /// Indentation level.
 | 
			
		||||
    #[arg(long, default_value = "4")]
 | 
			
		||||
    indent: usize,
 | 
			
		||||
    /// Enable verbose output.
 | 
			
		||||
    #[arg(short, long)]
 | 
			
		||||
    verbose: bool,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() -> Result<()> {
 | 
			
		||||
@@ -60,9 +73,10 @@ fn main() -> Result<()> {
 | 
			
		||||
        interfaces,
 | 
			
		||||
        offsets,
 | 
			
		||||
        schemas,
 | 
			
		||||
        verbose,
 | 
			
		||||
        output,
 | 
			
		||||
        mut builders,
 | 
			
		||||
        indent,
 | 
			
		||||
        output,
 | 
			
		||||
        verbose,
 | 
			
		||||
    } = Args::parse();
 | 
			
		||||
 | 
			
		||||
    let log_level = if verbose {
 | 
			
		||||
@@ -83,14 +97,6 @@ fn main() -> Result<()> {
 | 
			
		||||
 | 
			
		||||
    process.initialize()?;
 | 
			
		||||
 | 
			
		||||
    let mut builders: Vec<FileBuilderEnum> = vec![
 | 
			
		||||
        FileBuilderEnum::CppFileBuilder(CppFileBuilder),
 | 
			
		||||
        FileBuilderEnum::CSharpFileBuilder(CSharpFileBuilder),
 | 
			
		||||
        FileBuilderEnum::JsonFileBuilder(JsonFileBuilder::default()),
 | 
			
		||||
        FileBuilderEnum::PythonFileBuilder(PythonFileBuilder),
 | 
			
		||||
        FileBuilderEnum::RustFileBuilder(RustFileBuilder),
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    let all = !(interfaces || offsets || schemas);
 | 
			
		||||
 | 
			
		||||
    if schemas || all {
 | 
			
		||||
@@ -106,9 +112,30 @@ fn main() -> Result<()> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    info!(
 | 
			
		||||
        "<on-green>Done!</> <green>Time elapsed: {:?}</>",
 | 
			
		||||
        "<on-green>Done!</> <green>Time elapsed: <b>{:?}</></>",
 | 
			
		||||
        now.elapsed()
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Parses the given file extension and returns the corresponding `FileBuilderEnum`.
 | 
			
		||||
///
 | 
			
		||||
/// # Arguments
 | 
			
		||||
///
 | 
			
		||||
/// * `extension` - A string slice that represents the file extension.
 | 
			
		||||
///
 | 
			
		||||
/// # Returns
 | 
			
		||||
///
 | 
			
		||||
/// * `Ok(FileBuilderEnum)` - If the extension is valid, returns the corresponding `FileBuilderEnum`.
 | 
			
		||||
/// * `Err(&'static str)` - If the extension is invalid, returns an error message.
 | 
			
		||||
fn parse_extension(extension: &str) -> Result<FileBuilderEnum, &'static str> {
 | 
			
		||||
    match extension {
 | 
			
		||||
        ".cs" => Ok(FileBuilderEnum::CSharpFileBuilder(CSharpFileBuilder)),
 | 
			
		||||
        ".hpp" => Ok(FileBuilderEnum::CppFileBuilder(CppFileBuilder)),
 | 
			
		||||
        ".json" => Ok(FileBuilderEnum::JsonFileBuilder(JsonFileBuilder::default())),
 | 
			
		||||
        ".py" => Ok(FileBuilderEnum::PythonFileBuilder(PythonFileBuilder)),
 | 
			
		||||
        ".rs" => Ok(FileBuilderEnum::RustFileBuilder(RustFileBuilder)),
 | 
			
		||||
        _ => Err("Invalid extension"),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user