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
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions benchmarks/ping-pong/client/ping_pong.idl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

!@sails: 0.9.2

service PingPongService {
service PingPongService@0x229cc617d36f5be2 {
functions {
Ping(payload: PingPongPayload) -> PingPongPayload;
}
Expand All @@ -20,6 +20,6 @@ program PingPong {
NewForBench();
}
services {
PingPongService,
PingPongService@0x229cc617d36f5be2,
}
}
36 changes: 18 additions & 18 deletions examples/demo/client/demo_client.idl
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@

!@sails: 0.9.2

service PingPong {
service PingPong@0x21bd9a9aa51da264 {
functions {
Ping(input: String) -> String throws String;
}
}

service Counter {
service Counter@0x579d6daba41b7d82 {
events {
/// Emitted when a new value is added to the counter
Added(u32),
Expand All @@ -25,7 +25,7 @@ service Counter {
}
}

service WalkerService {
service WalkerService@0xee1536b55170bf0a {
events {
Walked {
from: (i32, i32),
Expand All @@ -39,18 +39,18 @@ service WalkerService {
}
}

service MammalService {
service MammalService@0xff6b93e1961026fe {
functions {
MakeSound() -> String;
@query
AvgWeight() -> u32;
}
}

service Dog {
service Dog@0x18666e67a21917a1 {
extends {
WalkerService,
MammalService,
WalkerService@0xee1536b55170bf0a,
MammalService@0xff6b93e1961026fe,
}
events {
Barked,
Expand All @@ -60,7 +60,7 @@ service Dog {
}
}

service References {
service References@0xb7a968809a79420a {
functions {
Add(v: u32) -> u32;
AddByte(byte: u8) -> [u8];
Expand All @@ -79,7 +79,7 @@ service References {
}
}

service ThisThat {
service ThisThat@0x18ff5d765e12ddad {
functions {
DoThat(param: DoThatParam) -> (ActorId, NonZeroU32, ManyVariantsReply) throws (String);
DoThis(p1: u32, p2: String, p3: (Option<H160>, NonZeroU8), p4: TupleStruct) -> (String, u32);
Expand Down Expand Up @@ -120,7 +120,7 @@ service ThisThat {
}
}

service ValueFee {
service ValueFee@0x41c1080b4e1e8dc5 {
events {
Withheld(u128),
}
Expand All @@ -131,7 +131,7 @@ service ValueFee {
}
}

service Chaos {
service Chaos@0xf0c8c80dfabf72d5 {
functions {
@query
PanicAfterWait();
Expand All @@ -150,12 +150,12 @@ program DemoClient {
New(counter: Option<u32>, dog_position: Option<(i32, i32)>);
}
services {
PingPong,
Counter,
Dog,
References,
ThisThat,
ValueFee,
Chaos,
PingPong@0x21bd9a9aa51da264,
Counter@0x579d6daba41b7d82,
Dog@0x18666e67a21917a1,
References@0xb7a968809a79420a,
ThisThat@0x18ff5d765e12ddad,
ValueFee@0x41c1080b4e1e8dc5,
Chaos@0xf0c8c80dfabf72d5,
}
}
4 changes: 2 additions & 2 deletions examples/redirect/client/redirect_client.idl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

!@sails: 0.9.2

service Redirect {
service Redirect@0x731817d29b2c518b {
functions {
/// Exit from program with inheritor ID
Exit(inheritor_id: ActorId);
Expand All @@ -16,6 +16,6 @@ program RedirectClient {
New();
}
services {
Redirect,
Redirect@0x731817d29b2c518b,
}
}
4 changes: 2 additions & 2 deletions examples/redirect/proxy-client/redirect_proxy_client.idl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

!@sails: 0.9.2

service Proxy {
service Proxy@0xda3d188945af8090 {
functions {
/// Get program ID of the target program via client
@query
Expand All @@ -15,6 +15,6 @@ program RedirectProxyClient {
New(target: ActorId);
}
services {
Proxy,
Proxy@0xda3d188945af8090,
}
}
1 change: 1 addition & 0 deletions rs/client-gen/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ anyhow.workspace = true
convert_case.workspace = true
genco.workspace = true
parity-scale-codec.workspace = true
sails-idl-meta = { workspace = true, features = ["ast"] }
sails-idl-parser-v2 = { workspace = true, features = ["std"] }

[dev-dependencies]
Expand Down
17 changes: 12 additions & 5 deletions rs/client-gen/src/mock_generator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ use crate::helpers::fn_args_with_types_path;
use convert_case::{Case, Casing};
use genco::prelude::*;
use rust::Tokens;
use sails_idl_parser_v2::{ast, visitor, visitor::Visitor};
use sails_idl_parser_v2::{
ast::{self, ServiceIdent},
visitor::{self, Visitor},
};

pub(crate) struct MockGenerator<'ast> {
service_name: &'ast str,
Expand Down Expand Up @@ -40,10 +43,14 @@ impl<'ast> Visitor<'ast> for MockGenerator<'ast> {
fn visit_service_unit(&mut self, service: &'ast ast::ServiceUnit) {
visitor::accept_service_unit(service, self);

for extended_service_name in &service.extends {
let method_name = extended_service_name.to_case(Case::Snake);
let impl_name = extended_service_name.to_case(Case::Pascal);
let mod_name = extended_service_name.to_case(Case::Snake);
for ServiceIdent {
name,
interface_id: _,
} in &service.extends
{
let method_name = name.to_case(Case::Snake);
let impl_name = name.to_case(Case::Pascal);
let mod_name = name.to_case(Case::Snake);

quote_in! { self.tokens =>
fn $(&method_name) (&self, ) -> $(self.sails_path)::client::Service<super::$(mod_name.as_str())::$(impl_name.as_str())Impl, $(self.sails_path)::client::GstdEnv>;
Expand Down
24 changes: 15 additions & 9 deletions rs/client-gen/src/root_generator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,10 @@ impl<'ast> Visitor<'ast> for RootGenerator<'ast> {
self.tokens.extend(ctor_gen.finalize());

for service_item in &program.services {
let service_name = service_item.route.as_ref().unwrap_or(&service_item.name);
let service_name = service_item
.route
.as_ref()
.unwrap_or(&service_item.name.name);
self.program_exported_services.push(service_name);
}

Expand All @@ -119,7 +122,7 @@ impl<'ast> Visitor<'ast> for RootGenerator<'ast> {

fn visit_service_unit(&mut self, service: &'ast ast::ServiceUnit) {
let mut client_gen = ServiceGenerator::new(
&service.name,
&service.name.name,
self.sails_path,
&self.external_types,
self.mocks_feature_name,
Expand All @@ -141,20 +144,23 @@ impl<'ast> Visitor<'ast> for RootGenerator<'ast> {
}

fn visit_service_expo(&mut self, service_item: &'ast ast::ServiceExpo) {
let service_name = service_item.route.as_ref().unwrap_or(&service_item.name);
let method_name = service_item.name.to_case(Case::Snake);
let route_pascal_case = service_name.to_case(Case::Pascal);
let route_snake_case = service_name.to_case(Case::Snake);
let service_route = service_item
.route
.as_ref()
.unwrap_or(&service_item.name.name);
let method_name = service_route.to_case(Case::Snake);
let name_pascal_case = service_item.name.name.to_case(Case::Pascal);
let name_snake_case = service_item.name.name.to_case(Case::Snake);

generate_doc_comments(&mut self.service_trait_tokens, &service_item.docs);

quote_in!(self.service_trait_tokens =>
$['\r'] fn $(&method_name)(&self) -> $(self.sails_path)::client::Service<$(route_snake_case.clone())::$(route_pascal_case.clone())Impl, Self::Env>;
$['\r'] fn $(&method_name)(&self) -> $(self.sails_path)::client::Service<$(&name_snake_case)::$(&name_pascal_case)Impl, Self::Env>;
);

quote_in!(self.service_impl_tokens =>
$['\r'] fn $(&method_name)(&self) -> $(self.sails_path)::client::Service<$(route_snake_case)::$(route_pascal_case)Impl, Self::Env> {
self.service(stringify!($(service_item.name.clone())))
$['\r'] fn $(&method_name)(&self) -> $(self.sails_path)::client::Service<$(&name_snake_case)::$(&name_pascal_case)Impl, Self::Env> {
self.service(stringify!($(&name_pascal_case)))
}
);
}
Expand Down
13 changes: 9 additions & 4 deletions rs/client-gen/src/service_generators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use crate::type_generators::{TopLevelTypeGenerator, generate_type_decl_with_path
use convert_case::{Case, Casing};
use genco::prelude::*;
use rust::Tokens;
use sails_idl_meta::ServiceIdent;
use sails_idl_parser_v2::{ast, visitor, visitor::Visitor};
use std::collections::HashMap;

Expand Down Expand Up @@ -100,10 +101,14 @@ impl<'ast> Visitor<'ast> for ServiceGenerator<'ast> {
fn visit_service_unit(&mut self, service: &'ast ast::ServiceUnit) {
visitor::accept_service_unit(service, self);

for extended_service_name in &service.extends {
let method_name = extended_service_name.to_case(Case::Snake);
let impl_name = extended_service_name.to_case(Case::Pascal);
let mod_name = extended_service_name.to_case(Case::Snake);
for ServiceIdent {
name,
interface_id: _,
} in &service.extends
{
let method_name = name.to_case(Case::Snake);
let impl_name = name.to_case(Case::Pascal);
let mod_name = name.to_case(Case::Snake);

quote_in! { self.trait_tokens =>
$['\r'] fn $(&method_name)(&self) -> $(self.sails_path)::client::Service<super::$(mod_name.as_str())::$(impl_name.as_str())Impl, Self::Env>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ expression: idl
---
!@sails: 0.9.2

service Svc1 {
service Svc1@0x349b842b767fb2ab {
events {
DoThisEvent {
/// Some u32 value
Expand All @@ -20,7 +20,7 @@ service Svc1 {
}
}

service Svc2 {
service Svc2@0xc7f3ccbc102da928 {
functions {
DoThis(p1: u32, p2: String) -> u32;
}
Expand All @@ -31,7 +31,7 @@ program MyProgram {
Create();
}
services {
Svc1,
Svc2,
Svc1@0x349b842b767fb2ab,
Svc2@0xc7f3ccbc102da928,
}
}
Loading