Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ pub mod ser {
JS_ENUM_VARIANT_VALUE,
},
switch_case::DefaultCase,
utils::wrap_with_braces_if_multi_line,
},
registry::{EnumVariant, EnumVariantType},
};
Expand Down Expand Up @@ -91,10 +92,10 @@ pub mod ser {

Case::new(
variant_name,
quote! {
wrap_with_braces_if_multi_line(quote! {
s.serialize_number(U32_BYTES, false, $index);
$body
},
}),
)
}
}
Expand Down
2 changes: 1 addition & 1 deletion postcard-bindgen-core/src/code_gen/python/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ impl FormatInto<Python> for Function {
.enumerate()
.map(|(i, f)| {
if i > 0 {
format!(" {}", f)
format!(" {f}")
} else {
f.to_string()
}
Expand Down
54 changes: 54 additions & 0 deletions postcard-bindgen-core/src/code_gen/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,37 @@ use crate::{
type_info::ObjectMeta,
};

pub fn wrap_with_braces_if_multi_line<L: Lang>(tokens: impl FormatInto<L>) -> Tokens<L> {
let tokens = quote!($tokens);
if tokens.is_empty() {
return Tokens::new();
}

let mut result = Tokens::new();

// If the tokens include more than one line break, we assume it is a multi-line expression
// and wrap it in curly braces.
if tokens
.iter()
.map(|t| matches!(t, Item::Push))
.filter(|v| *v)
.count()
> 1
{
result.append("{");
result.indent();
result.append(tokens);
result.unindent();
result.append("}");
} else {
// If there are no line breaks, we can just append the tokens directly.
result.append(tokens);
return result;
}

result
}

pub fn break_long_logical_lines<L: Lang>(tokens: impl FormatInto<L>) -> Tokens<L> {
let tokens = quote!($tokens);
let mut result = Tokens::new();
Expand Down Expand Up @@ -337,4 +368,27 @@ mod test {

assert_eq!(break_line.to_file_string().unwrap(), "a &&\n b &&\n c ||\n d &&\n e &&\n f &&\n g ||\n h &&\n i &&\n j &&\n k\n".to_string());
}

#[test]
fn test_wrap_with_braces_if_multi_line() {
let line: Tokens<JavaScript> = quote!(
var a = 1;
);

let wrapped = wrap_with_braces_if_multi_line(line);
assert_eq!(
wrapped.to_file_string().unwrap(),
"var a = 1;\n".to_string()
);
let multi_line: Tokens<JavaScript> = quote!(
var a = 1;
var b = 2;
var c = 3;
);
let wrapped_multi_line = wrap_with_braces_if_multi_line(multi_line);
assert_eq!(
wrapped_multi_line.to_file_string().unwrap(),
"{\n var a = 1;\n var b = 2;\n var c = 3;\n}\n".to_string()
);
}
}
2 changes: 1 addition & 1 deletion postcard-bindgen-core/src/code_gen/variable_path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub enum VariableAccess {
impl VariableAccess {
fn into_string(self) -> String {
match self {
Self::Indexed(i) => format!("{}", i),
Self::Indexed(i) => format!("{i}"),
Self::Field(f) => f,
}
}
Expand Down
2 changes: 1 addition & 1 deletion postcard-bindgen-core/src/path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ impl<'a, 'b> From<Path<'a, 'b>> for String {
impl Display for Path<'_, '_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if let Some(path) = &self.path {
write!(f, "{}", path)
write!(f, "{path}")
} else {
write!(f, "")
}
Expand Down
2 changes: 1 addition & 1 deletion postcard-bindgen-core/src/registry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ impl Display for NodeType {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
NodeType::Container(c) => write!(f, "Container({}, {})", c.name, c.path),
NodeType::Module(m) => write!(f, "Module({})", m),
NodeType::Module(m) => write!(f, "Module({m})"),
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
source: postcard-bindgen-core/tests/javascript.rs
expression: ser_file
snapshot_kind: text
---
function serialize_STRUCT_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, v.field_1);
Expand Down Expand Up @@ -53,15 +54,19 @@ function serialize_ENUM_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, 0);
break;
case "BVariant":
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
{
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
}
break;
case "CVariant":
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
{
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
}
break;
default:
throw "variant not implemented"
Expand All @@ -74,15 +79,19 @@ function serialize_sub_module_ENUM_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, 0);
break;
case "BVariant":
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
{
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
}
break;
case "CVariant":
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
{
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
}
break;
default:
throw "variant not implemented"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
source: postcard-bindgen-core/tests/javascript.rs
expression: ser_file
snapshot_kind: text
---
function serialize_STRUCT_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, v.field_1);
Expand Down Expand Up @@ -53,15 +54,19 @@ function serialize_ENUM_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, 0);
break;
case "BVariant":
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
{
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
}
break;
case "CVariant":
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
{
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
}
break;
default:
throw "variant not implemented"
Expand All @@ -74,15 +79,19 @@ function serialize_sub_module_ENUM_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, 0);
break;
case "BVariant":
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
{
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
}
break;
case "CVariant":
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
{
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
}
break;
default:
throw "variant not implemented"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
source: postcard-bindgen-core/tests/javascript.rs
expression: ser_file
snapshot_kind: text
---
function serialize_STRUCT_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, v.field_1);
Expand Down Expand Up @@ -53,15 +54,19 @@ function serialize_ENUM_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, 0);
break;
case "BVariant":
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
{
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
}
break;
case "CVariant":
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
{
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
}
break;
default:
throw "variant not implemented"
Expand All @@ -74,15 +79,19 @@ function serialize_sub_module_ENUM_TYPE(s, v) {
s.serialize_number(U32_BYTES, false, 0);
break;
case "BVariant":
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
{
s.serialize_number(U32_BYTES, false, 1);
s.serialize_number(U32_BYTES, false, v.value[0]);
s.serialize_string(v.value[1]);
}
break;
case "CVariant":
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
{
s.serialize_number(U32_BYTES, false, 2);
s.serialize_number(U32_BYTES, false, v.value.field_1);
s.serialize_string(v.value.field_2);
serialize_STRUCT_TYPE(s, v.value.struct_type);
}
break;
default:
throw "variant not implemented"
Expand Down
2 changes: 1 addition & 1 deletion postcard-bindgen/src/package/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ impl Debug for VersionFromStrError {

impl Display for VersionFromStrError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self)
write!(f, "{self:?}")
}
}

Expand Down