Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions cli/src/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use std::path::PathBuf;
#[derive(Debug, Clone, Copy, clap::ValueEnum)]
#[non_exhaustive]
pub enum AvailableLanguage {
Java,
Kotlin,
Scala,
Swift,
Expand Down Expand Up @@ -33,6 +34,14 @@ pub struct Args {
#[arg(short, long)]
pub swift_prefix: Option<String>,

/// Prefix for generated Java types
#[arg(long)]
pub java_allow_multiple_classes_per_file: Option<bool>,

/// Prefix for generated Java types
#[arg(long)]
pub java_prefix: Option<String>,

/// Prefix for generated Kotlin types
#[arg(short, long)]
pub kotlin_prefix: Option<String>,
Expand All @@ -41,6 +50,10 @@ pub struct Args {
#[arg(short, long)]
pub java_package: Option<String>,

/// Java serializer module name
#[arg(long = "java-module-name")]
pub java_module_name: Option<String>,

/// Kotlin serializer module name
#[arg(short = 'm', long = "module-name")]
pub kotlin_module_name: Option<String>,
Expand Down
11 changes: 11 additions & 0 deletions cli/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ pub struct PythonParams {
pub type_mappings: HashMap<String, String>,
}

#[derive(Default, Serialize, Deserialize, Debug, PartialEq, Eq)]
#[serde(default)]
pub struct JavaParams {
pub allow_multiple_classes_per_file: bool,
pub package: String,
pub module_name: String,
pub prefix: String,
pub type_mappings: HashMap<String, String>,
}

#[derive(Default, Serialize, Deserialize, Debug, PartialEq, Eq)]
#[serde(default)]
pub struct KotlinParams {
Expand Down Expand Up @@ -69,6 +79,7 @@ pub struct GoParams {
pub(crate) struct Config {
pub swift: SwiftParams,
pub typescript: TypeScriptParams,
pub java: JavaParams,
pub kotlin: KotlinParams,
pub scala: ScalaParams,
#[cfg(feature = "python")]
Expand Down
26 changes: 25 additions & 1 deletion cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use typeshare_core::language::Go;
use typeshare_core::language::Python;
use typeshare_core::{
context::ParseContext,
language::{CrateName, Kotlin, Language, Scala, SupportedLanguage, Swift, TypeScript},
language::{CrateName, Java, Kotlin, Language, Scala, SupportedLanguage, Swift, TypeScript},
parser::ParsedData,
reconcile::reconcile_aliases,
};
Expand Down Expand Up @@ -87,6 +87,7 @@ fn generate_types(config_file: Option<&Path>, options: &Args) -> anyhow::Result<
let language_type = match options.language {
None => panic!("no language specified; `clap` should have guaranteed its presence"),
Some(language) => match language {
args::AvailableLanguage::Java => SupportedLanguage::Java,
args::AvailableLanguage::Kotlin => SupportedLanguage::Kotlin,
args::AvailableLanguage::Scala => SupportedLanguage::Scala,
args::AvailableLanguage::Swift => SupportedLanguage::Swift,
Expand Down Expand Up @@ -195,6 +196,14 @@ fn language(
codablevoid_constraints: config.swift.codablevoid_constraints,
..Default::default()
}),
SupportedLanguage::Java => Box::new(Java {
allow_multiple_classes_per_file: config.java.allow_multiple_classes_per_file,
package: config.java.package,
module_name: config.java.module_name,
prefix: config.java.prefix,
type_mappings: config.java.type_mappings,
..Default::default()
}),
SupportedLanguage::Kotlin => Box::new(Kotlin {
package: config.kotlin.package,
module_name: config.kotlin.module_name,
Expand Down Expand Up @@ -242,14 +251,29 @@ fn override_configuration(mut config: Config, options: &Args) -> anyhow::Result<
config.swift.prefix = swift_prefix.clone();
}

if let Some(java_allow_multiple_classes_per_file) =
options.java_allow_multiple_classes_per_file.as_ref()
{
config.java.allow_multiple_classes_per_file = java_allow_multiple_classes_per_file.clone();
}

if let Some(java_prefix) = options.java_prefix.as_ref() {
config.java.prefix = java_prefix.clone();
}

if let Some(kotlin_prefix) = options.kotlin_prefix.as_ref() {
config.kotlin.prefix = kotlin_prefix.clone();
}

if let Some(java_package) = options.java_package.as_ref() {
config.java.package = java_package.clone();
config.kotlin.package = java_package.clone();
}

if let Some(module_name) = options.java_module_name.as_ref() {
config.java.module_name = module_name.to_string();
}

if let Some(module_name) = options.kotlin_module_name.as_ref() {
config.kotlin.module_name = module_name.to_string();
}
Expand Down
1 change: 1 addition & 0 deletions cli/src/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ fn output_file_name(language_type: SupportedLanguage, crate_name: &CrateName) ->

match language_type {
SupportedLanguage::Go => snake_case(),
SupportedLanguage::Java => snake_case(),
SupportedLanguage::Kotlin => snake_case(),
SupportedLanguage::Scala => snake_case(),
SupportedLanguage::Swift => pascal_case(),
Expand Down
2 changes: 1 addition & 1 deletion core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ itertools = "0.12"
lazy_format = "2"
joinery = "2"
topological-sort = { version = "0.2.2"}
convert_case = { version = "0.6.0"}
convert_case = "0.6.0"
log.workspace = true
flexi_logger.workspace = true

Expand Down
8 changes: 8 additions & 0 deletions core/data/tests/can_generate_bare_string_enum/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.agilebits.onepassword

/// This is a comment.
public enum Colors {
Red,
Blue,
Green
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.agilebits.onepassword

public record SomeStruct(
long field_a
) {}

9 changes: 9 additions & 0 deletions core/data/tests/can_generate_simple_enum/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.agilebits.onepassword

/// This is a comment.
/// Continued lovingly here
public enum Colors {
Red,
Blue,
Green
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.agilebits.onepassword

public record Location() {}

/// This is a comment.
public record Person(
/// This is another comment
String name,
short age,
String info,
java.util.ArrayList<String> emails,
Location location
) {}

6 changes: 6 additions & 0 deletions core/data/tests/can_generate_slice_of_user_type/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.agilebits.onepassword

public record Video(
Tag[] tags
) {}

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.agilebits.onepassword

public record MyStruct(
int a,
int c
) {}

4 changes: 4 additions & 0 deletions core/data/tests/can_generate_unit_structs/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.agilebits.onepassword

public record UnitStruct() {}

6 changes: 6 additions & 0 deletions core/data/tests/can_handle_quote_in_serde_rename/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.agilebits.onepassword

/// This is a comment.
public enum Colors {
Green
}
18 changes: 18 additions & 0 deletions core/data/tests/can_handle_serde_rename_all/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.agilebits.onepassword

/// This is a Person struct with camelCase rename
public record Person(
String firstName,
String lastName,
short age,
int extraSpecialField1,
java.util.ArrayList<String> extraSpecialField2
) {}

/// This is a Person2 struct with UPPERCASE rename
public record Person2(
String FIRST_NAME,
String LAST_NAME,
short AGE
) {}

14 changes: 14 additions & 0 deletions core/data/tests/can_handle_serde_rename_on_top_level/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.agilebits.onepassword

public record OtherType() {}

/// This is a comment.
public record PersonTwo(
String name,
short age,
int extraSpecialFieldOne,
java.util.ArrayList<String> extraSpecialFieldTwo,
OtherType nonStandardDataType,
java.util.ArrayList<OtherType> nonStandardDataTypeInArray
) {}

18 changes: 18 additions & 0 deletions core/data/tests/can_recognize_types_inside_modules/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.agilebits.onepassword

public record A(
long field
) {}

public record AB(
long field
) {}

public record ABC(
long field
) {}

public record OutsideOfModules(
long field
) {}

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.agilebits.onepassword

/// This is a comment.
/// Continued lovingly here
public enum Colors {
red,
blue,
green_like
}
17 changes: 17 additions & 0 deletions core/data/tests/generate_types/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.agilebits.onepassword

public record CustomType() {}

public record Types(
String s,
String static_s,
byte int8,
float _float,
double _double,
java.util.ArrayList<String> array,
String[] fixed_length_array,
java.util.HashMap<String, int> dictionary,
java.util.HashMap<String, int> optional_dictionary,
CustomType custom_type
) {}

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.agilebits.onepassword

public record MyEmptyStruct() {}

9 changes: 9 additions & 0 deletions core/data/tests/kebab_case_rename/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.agilebits.onepassword

/// This is a comment.
public record Things(
String bla,
String label,
String label_left
) {}

23 changes: 23 additions & 0 deletions core/data/tests/orders_types/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.agilebits.onepassword

public record A(
long field
) {}

public record B(
A dependsOn
) {}

public record C(
B dependsOn
) {}

public record E(
D dependsOn
) {}

public record D(
C dependsOn,
E alsoDependsOn
) {}

11 changes: 11 additions & 0 deletions core/data/tests/resolves_qualified_type/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.agilebits.onepassword

public record QualifiedTypes(
String unqualified,
String qualified,
java.util.ArrayList<String> qualified_vec,
java.util.HashMap<String, String> qualified_hashmap,
String qualified_optional,
java.util.HashMap<String, java.util.ArrayList<String>> qualfied_optional_hashmap_vec
) {}

8 changes: 8 additions & 0 deletions core/data/tests/serialize_field_as/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.agilebits.onepassword

public record EditItemViewModelSaveRequest(
String context,
java.util.ArrayList<EditItemSaveValue> values,
AutoFillItemActionRequest fill_action
) {}

6 changes: 6 additions & 0 deletions core/data/tests/test_generate_char/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.agilebits.onepassword

public record MyType(
String field
) {}

7 changes: 7 additions & 0 deletions core/data/tests/test_i54_u53_type/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.agilebits.onepassword

public record Foo(
long a,
java.math.BigInteger b
) {}

6 changes: 6 additions & 0 deletions core/data/tests/test_serde_default_struct/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.agilebits.onepassword

public record Foo(
boolean bar
) {}

6 changes: 6 additions & 0 deletions core/data/tests/test_serde_iso8601/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.agilebits.onepassword

public record Foo(
String time
) {}

6 changes: 6 additions & 0 deletions core/data/tests/test_serde_url/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.agilebits.onepassword

public record Foo(
String url
) {}

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.agilebits.onepassword

/// This is a comment.
public enum Colors {
red,
blue_ish,
Green
}
4 changes: 4 additions & 0 deletions core/data/tests/use_correct_decoded_variable_name/output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.agilebits.onepassword

public record MyEmptyStruct() {}

Loading