From d6193b6430da72eecb4c754a91949687af162a82 Mon Sep 17 00:00:00 2001 From: Jeremie Pelletier Date: Fri, 28 Jun 2024 09:55:42 -0400 Subject: [PATCH 1/5] C# codegen updated to match the SDK protobufectomy --- crates/cli/src/subcommands/generate/csharp.rs | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/crates/cli/src/subcommands/generate/csharp.rs b/crates/cli/src/subcommands/generate/csharp.rs index b4732b969b..e4acdaccd1 100644 --- a/crates/cli/src/subcommands/generate/csharp.rs +++ b/crates/cli/src/subcommands/generate/csharp.rs @@ -312,8 +312,8 @@ fn autogen_csharp_product_table_common( ], ); - writeln!(output, "[SpacetimeDB.Type]"); writeln!(output, "[DataContract]"); + writeln!(output, "[SpacetimeDB.Type]"); write!(output, "public partial class {name}"); if let Some(schema) = &schema { write!( @@ -328,7 +328,9 @@ fn autogen_csharp_product_table_common( } writeln!(output); indented_block(&mut output, |output| { - for field in &*product_type.elements { + let num_fields = product_type.elements.len(); + for i in 0..num_fields { + let field = &product_type.elements[i]; let field_name = field .name .as_ref() @@ -343,11 +345,14 @@ fn autogen_csharp_product_table_common( field_name.to_case(Case::Pascal), default_init(ctx, &field.algebraic_type) ); + if i + 1 != num_fields { + writeln!(output); + } } - writeln!(output); // If this is a table, we want to generate event accessor and indexes if let Some(schema) = &schema { + writeln!(output); let constraints = schema.column_constraints(); let mut unique_indexes = Vec::new(); // Declare custom index dictionaries @@ -647,7 +652,7 @@ pub fn autogen_csharp_globals(items: &[GenItem], namespace: &str) -> Vec<(String ); writeln!( output, - "public ReducerEvent(ClientApi.Event dbEvent, IReducerArgs? args) : base(dbEvent) => Args = args;" + "public ReducerEvent(TransactionUpdate update, IReducerArgs? args) : base(update) => Args = args;" ); writeln!(output); // Properties for reducer args @@ -694,18 +699,18 @@ pub fn autogen_csharp_globals(items: &[GenItem], namespace: &str) -> Vec<(String writeln!( output, - "protected override ReducerEvent ReducerEventFromDbEvent(ClientApi.Event dbEvent)" + "protected override ReducerEvent ReducerEventFromDbEvent(TransactionUpdate update)" ); indented_block(output, |output| { - writeln!(output, "var argBytes = dbEvent.FunctionCall.ArgBytes;"); - writeln!(output, "IReducerArgs? args = dbEvent.FunctionCall.Reducer switch {{"); + writeln!(output, "var encodedArgs = update.ReducerCall.Args;"); + writeln!(output, "IReducerArgs? args = update.ReducerCall.ReducerName switch {{"); { indent_scope!(output); for (reducer, reducer_name) in std::iter::zip(&reducers, &reducer_names) { let reducer_str_name = &reducer.name; writeln!( output, - "\"{reducer_str_name}\" => BSATNHelpers.FromProtoBytes<{reducer_name}ArgsStruct>(argBytes)," + "\"{reducer_str_name}\" => BSATNHelpers.Decode<{reducer_name}ArgsStruct>(encodedArgs)," ); } writeln!(output, "\"\" => null,"); @@ -715,7 +720,7 @@ pub fn autogen_csharp_globals(items: &[GenItem], namespace: &str) -> Vec<(String ); } writeln!(output, "}};"); - writeln!(output, "return new ReducerEvent(dbEvent, args);"); + writeln!(output, "return new ReducerEvent(update, args);"); }); }); From a6ab8016460267dda0e70db4efb58866c1910217 Mon Sep 17 00:00:00 2001 From: Jeremie Pelletier Date: Fri, 28 Jun 2024 13:26:10 -0400 Subject: [PATCH 2/5] update --- crates/cli/src/subcommands/generate/csharp.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/cli/src/subcommands/generate/csharp.rs b/crates/cli/src/subcommands/generate/csharp.rs index e4acdaccd1..6be832767c 100644 --- a/crates/cli/src/subcommands/generate/csharp.rs +++ b/crates/cli/src/subcommands/generate/csharp.rs @@ -306,14 +306,15 @@ fn autogen_csharp_product_table_common( let mut output = CsharpAutogen::new( namespace, &[ + "SpacetimeDB.ClientApi", "System.Collections.Generic", "System.Linq", "System.Runtime.Serialization", ], ); - writeln!(output, "[DataContract]"); writeln!(output, "[SpacetimeDB.Type]"); + writeln!(output, "[DataContract]"); write!(output, "public partial class {name}"); if let Some(schema) = &schema { write!( From 328aa4f9cf3d183ea9f7052920dc9e0b0b6e2504 Mon Sep 17 00:00:00 2001 From: Jeremie Pelletier Date: Fri, 28 Jun 2024 13:32:51 -0400 Subject: [PATCH 3/5] remove style changes in codegen --- crates/cli/src/subcommands/generate/csharp.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/crates/cli/src/subcommands/generate/csharp.rs b/crates/cli/src/subcommands/generate/csharp.rs index 6be832767c..d32d62929c 100644 --- a/crates/cli/src/subcommands/generate/csharp.rs +++ b/crates/cli/src/subcommands/generate/csharp.rs @@ -329,9 +329,7 @@ fn autogen_csharp_product_table_common( } writeln!(output); indented_block(&mut output, |output| { - let num_fields = product_type.elements.len(); - for i in 0..num_fields { - let field = &product_type.elements[i]; + for field in &*product_type.elements { let field_name = field .name .as_ref() @@ -346,14 +344,11 @@ fn autogen_csharp_product_table_common( field_name.to_case(Case::Pascal), default_init(ctx, &field.algebraic_type) ); - if i + 1 != num_fields { - writeln!(output); - } } + writeln!(output); // If this is a table, we want to generate event accessor and indexes if let Some(schema) = &schema { - writeln!(output); let constraints = schema.column_constraints(); let mut unique_indexes = Vec::new(); // Declare custom index dictionaries From ec22ba0b1e3ce2d5b2ef8ec402b6a6cb982c0485 Mon Sep 17 00:00:00 2001 From: Jeremie Pelletier Date: Tue, 9 Jul 2024 11:08:29 -0400 Subject: [PATCH 4/5] Add SpacetimeDB.ClientApi to C# codegen --- crates/cli/src/subcommands/generate/csharp.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/cli/src/subcommands/generate/csharp.rs b/crates/cli/src/subcommands/generate/csharp.rs index d32d62929c..22f2fc5701 100644 --- a/crates/cli/src/subcommands/generate/csharp.rs +++ b/crates/cli/src/subcommands/generate/csharp.rs @@ -177,6 +177,7 @@ impl CsharpAutogen { if namespace != "SpacetimeDB" { writeln!(output, "using SpacetimeDB;"); } + writeln!(output, "using SpacetimeDB.ClientApi;"); for extra_using in extra_usings { writeln!(output, "using {extra_using};"); } From 9afb57ff026174207f8ac99929621f6b23838fee Mon Sep 17 00:00:00 2001 From: Jeremie Pelletier Date: Thu, 11 Jul 2024 11:21:07 -0400 Subject: [PATCH 5/5] Move C# codegen from BigInteger to U128 --- crates/cli/src/subcommands/generate/csharp.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/cli/src/subcommands/generate/csharp.rs b/crates/cli/src/subcommands/generate/csharp.rs index 22f2fc5701..218e561216 100644 --- a/crates/cli/src/subcommands/generate/csharp.rs +++ b/crates/cli/src/subcommands/generate/csharp.rs @@ -30,7 +30,8 @@ fn maybe_primitive(b: &BuiltinType) -> MaybePrimitive { BuiltinType::U32 => "uint", BuiltinType::I64 => "long", BuiltinType::U64 => "ulong", - BuiltinType::I128 | BuiltinType::U128 => "System.Numerics.BigInteger", + BuiltinType::I128 => "I128", + BuiltinType::U128 => "U128", BuiltinType::String => "string", BuiltinType::F32 => "float", BuiltinType::F64 => "double",