diff --git a/Cargo.toml b/Cargo.toml index 802493c..2df73f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,14 +19,15 @@ uniffi_macros = { version = "0.16.0", features = ["builtin-bindgen"] } uniffi = { version = "0.16.0", features = ["builtin-bindgen"] } thiserror = "1.0" anyhow = "=1.0.45" # remove after upgrading to next version of uniffi +uniffi_bindgen = "0.16.0" -uniffi_bindgen = { version = "0.16.0", optional = true } +#uniffi_bindgen = { version = "0.16.0", optional = true } [build-dependencies] uniffi_build = { version = "0.16.0", features = ["builtin-bindgen"] } [features] -generate-python = ["uniffi_bindgen"] +#generate-python = ["uniffi_bindgen"] [[bin]] name = "generate" diff --git a/src/bin/generate-bindings.rs b/src/bin/generate-bindings.rs new file mode 100644 index 0000000..3e77a9a --- /dev/null +++ b/src/bin/generate-bindings.rs @@ -0,0 +1,67 @@ +use uniffi_bindgen; + +pub const BDK_UDL: &str = "src/bdk.udl"; + +#[derive(Debug)] +#[derive(PartialEq)] +pub enum Language { + KOTLIN, + // PYTHON, + // SWIFT, + UNSUPPORTED, +} + +impl Language { + fn to_string(self) -> &'static str { + if self == Language::KOTLIN { "kotlin" } + // else if self == Language::PYTHON { "python" } + // else if self == Language::SWIFT { "swift" } + else { panic!("Not a supported language") } + } +} + +fn parse_language(language_argument: &str) -> Language { + match language_argument { + "kotlin" => Language::KOTLIN, + // "python" => Language::PYTHON, + // "swift" => Language::SWIFT, + _ => panic!("Unsupported language") + } +} + +fn generate_bindings() -> Result<(), Box> { + use std::env; + let args: Vec = env::args().collect(); + let language: Language; + let output_directory: &String; + + if &args[1] != "--language" { + panic!("Please provide the --language option"); + } else { + language = parse_language(&args[2]); + } + + if &args[3] != "--out-dir" { + panic!("Please provide the --out-dir option"); + } else { + output_directory = &args[4] + } + + println!("Chosen language is {:?}", language); + println!("Output directory is {:?}", output_directory); + + uniffi_bindgen::generate_bindings( + &format!("{}/{}", env!("CARGO_MANIFEST_DIR"), BDK_UDL), + None, + vec![language.to_string()], + Some(&output_directory), + false, + )?; + + Ok(()) +} + +fn main() -> Result<(), Box> { + generate_bindings()?; + Ok(()) +}