Skip to content

Commit

Permalink
enums: enum generator (just to collect feedback)
Browse files Browse the repository at this point in the history
  • Loading branch information
adjabaev committed Aug 26, 2024
1 parent a0dab92 commit d778ff2
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 3 deletions.
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -102,5 +102,6 @@ members = [
"scripts/import-yoga-tests",
"benches",
"taffy_stylo",
"bindings/java"
"bindings/java",
"bindings/scripts"
]
3 changes: 1 addition & 2 deletions bindings/java/src/geom.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,7 @@ pub fn f_get_non_repeated_track_sizing_function<'local>(
base: &JObject<'local>,
field: &str,
) -> NonRepeatedTrackSizingFunction {
let nrtsft_field =
f_get_value(env, base, field, "Lcom/dioxuslabs/taffy/geom/grid/NonRepeatedTrackSizingFunction;");
let nrtsft_field = f_get_value(env, base, field, "Lcom/dioxuslabs/taffy/geom/grid/NonRepeatedTrackSizingFunction;");

get_non_repeated_track_sizing_function(env, nrtsft_field)
}
13 changes: 13 additions & 0 deletions bindings/scripts/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[package]
name = "bindings_scripts"
version = "0.0.1"
authors = [
"Arby Djabaev <contact@arby.be>"
]
edition = "2021"
description = "Scripts to generate bindings related stuff for Taffy (A flexible UI layout library)"
repository = "https://github.com/DioxusLabs/taffy"
license = "MIT"

[dependencies]
convert_case = "0.6.0"
64 changes: 64 additions & 0 deletions bindings/scripts/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
use std::collections::HashMap;

fn main() {
let mut enums: HashMap<&str, Vec<&str>> = HashMap::new();
enums.insert("Display", vec!["Block", "Flex", "Grid", "None"]);
enums.insert("BoxGenerationMode", vec!["Normal", "None"]);
enums.insert("Position", vec!["Relative", "Absolute"]);
enums.insert("BoxSizing", vec!["BorderBox", "ContentBox"]);
enums.insert("Overflow", vec!["Visible", "Clip", "Hidden", "Scroll"]);
enums.insert("TextAlign", vec!["Auto", "LegacyLeft", "LegacyRight", "LegacyCenter"]);
enums.insert("GridAutoFlow", vec!["Row", "Column", "RowDense", "ColumnDense"]);
enums.insert("FlexWrap", vec!["NoWrap", "Wrap", "WrapReverse"]);
enums.insert("FlexDirection", vec!["Row", "Column", "RowReverse", "ColumnReverse"]);

for (key, value) in enums.into_iter() {
create_enum(key, value);
}
}

fn create_enum(name: &str, values: Vec<&str>) {
println!("{}", create_java_enum(name, values));
}

fn create_java_enum(name: &str, values: Vec<&str>) -> String {
use convert_case::{Case, Casing};

let package = "java.com.dioxuslabs.taffy.enums";
let enum_name = name.to_case(Case::Pascal);

let mut result = format!("package {};\n\npublic enum {} {{\n", package, enum_name);

for (index, value) in values.iter().enumerate() {
let java_value = value.to_case(Case::UpperSnake);
result.push_str(" ");
result.push_str(&java_value);
result.push('(');
result.push_str(&index.to_string());
result.push_str("),\n");
}

// eliminate the last comma
if !values.is_empty() {
result.pop();
result.pop();
result.push('\n');
}

result.push('\n');
result.push_str(" ;\n");
result.push('\n');

result.push_str(" private final int ordinal;\n");

result.push('\n');
result.push_str(" ");
result.push_str(enum_name.as_str());
result.push_str("() {\n");
result.push_str(" this.ordinal = ordinal();\n");
result.push_str(" }\n");

result.push_str("}\n");

result
}

0 comments on commit d778ff2

Please sign in to comment.