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
11 changes: 5 additions & 6 deletions examples/demo/client/build.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use demo::DemoProgram;
use sails_client_gen::ClientGenerator;
use std::{env, path::PathBuf};

fn main() {
Expand All @@ -8,10 +9,8 @@ fn main() {
sails_idl_gen::generate_idl_to_file::<DemoProgram>(&idl_file_path).unwrap();

// Generate client code from IDL file
sails_client_gen::generate_client_from_idl(
&idl_file_path,
PathBuf::from(env::var("OUT_DIR").unwrap()).join("demo_client.rs"),
Some("with_mocks"),
)
.unwrap();
ClientGenerator::from_idl_path(&idl_file_path)
.with_mocks("with_mocks")
.generate_to(PathBuf::from(env::var("OUT_DIR").unwrap()).join("demo_client.rs"))
.unwrap();
}
10 changes: 4 additions & 6 deletions examples/no-svcs-prog/wasm/build.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use no_svcs_prog_app::Program;
use sails_client_gen::ClientGenerator;
use std::{env, path::PathBuf};

fn main() {
Expand All @@ -9,10 +10,7 @@ fn main() {

sails_idl_gen::generate_idl_to_file::<Program>(&idl_file_path).unwrap();

sails_client_gen::generate_client_from_idl(
&idl_file_path,
PathBuf::from(env::var("OUT_DIR").unwrap()).join("no_svcs_prog.rs"),
None,
)
.unwrap();
ClientGenerator::from_idl_path(&idl_file_path)
.generate_to(PathBuf::from(env::var("OUT_DIR").unwrap()).join("no_svcs_prog.rs"))
.unwrap();
}
5 changes: 4 additions & 1 deletion examples/rmrk/resource/app/build.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use sails_client_gen::ClientGenerator;
use std::{env, path::PathBuf};

fn main() {
Expand All @@ -21,6 +22,8 @@ fn main() {
let idl_file_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap())
.join("..\\..\\catalog\\wasm\\rmrk-catalog.idl");

sails_client_gen::generate_client_from_idl(idl_file_path, client_rs_file_path, Some("mockall"))
ClientGenerator::from_idl_path(&idl_file_path)
.with_mocks("mockall")
.generate_to(client_rs_file_path)
.unwrap();
}
5 changes: 4 additions & 1 deletion examples/rmrk/resource/wasm/build.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use rmrk_resource_app::Program;
use sails_client_gen::ClientGenerator;
use std::{env, path::PathBuf};

fn main() {
Expand All @@ -12,5 +13,7 @@ fn main() {

let out_dir_path = PathBuf::from(env::var("OUT_DIR").unwrap());
let client_rs_file_path = out_dir_path.join("rmrk_resource.rs");
sails_client_gen::generate_client_from_idl(idl_file_path, client_rs_file_path, None).unwrap();
ClientGenerator::from_idl_path(&idl_file_path)
.generate_to(client_rs_file_path)
.unwrap();
}
27 changes: 14 additions & 13 deletions rs/client-gen/src/ctor_generators.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
use crate::{
helpers::*, io_generators::generate_io_struct, type_generators::generate_type_decl_code,
};
use convert_case::{Case, Casing};
use genco::prelude::*;
use rust::Tokens;
use sails_idl_parser::{ast::visitor, ast::visitor::Visitor, ast::*};

use crate::{
helpers::*, io_generators::generate_io_struct, type_generators::generate_type_decl_code,
};

pub(crate) struct CtorFactoryGenerator {
service_name: String,
pub(crate) struct CtorFactoryGenerator<'a> {
service_name: &'a str,
sails_path: &'a str,
tokens: Tokens,
io_tokens: Tokens,
}

impl CtorFactoryGenerator {
pub(crate) fn new(service_name: String) -> Self {
impl<'a> CtorFactoryGenerator<'a> {
pub(crate) fn new(service_name: &'a str, sails_path: &'a str) -> Self {
Self {
service_name,
sails_path,
tokens: Tokens::new(),
io_tokens: Tokens::new(),
}
Expand All @@ -30,23 +31,23 @@ impl CtorFactoryGenerator {
use super::*;
pub mod io {
use super::*;
use sails_rs::calls::ActionIo;
use $(self.sails_path)::calls::ActionIo;
$(self.io_tokens)
}
}
}
}
}

impl<'ast> Visitor<'ast> for CtorFactoryGenerator {
impl<'a, 'ast> Visitor<'ast> for CtorFactoryGenerator<'a> {
fn visit_ctor(&mut self, ctor: &'ast Ctor) {
quote_in! {self.tokens =>
pub struct $(&self.service_name)Factory<R> {
pub struct $(self.service_name)Factory<R> {
#[allow(dead_code)]
remoting: R,
}

impl<R> $(&self.service_name)Factory<R> {
impl<R> $(self.service_name)Factory<R> {
#[allow(unused)]
pub fn new(remoting: R) -> Self {
Self {
Expand All @@ -55,7 +56,7 @@ impl<'ast> Visitor<'ast> for CtorFactoryGenerator {
}
}

impl<R: Remoting + Clone> traits::$(&self.service_name)Factory for $(&self.service_name)Factory<R> $("{")
impl<R: Remoting + Clone> traits::$(self.service_name)Factory for $(self.service_name)Factory<R> $("{")
type Args = R::Args;
};

Expand Down
23 changes: 12 additions & 11 deletions rs/client-gen/src/events_generator.rs
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
use crate::helpers::{method_bytes, path_bytes};
use genco::prelude::*;
use sails_idl_parser::{ast::visitor, ast::visitor::Visitor, ast::*};

use crate::helpers::{method_bytes, path_bytes};

pub(crate) struct EventsModuleGenerator {
service_name: String,
path: String,
pub(crate) struct EventsModuleGenerator<'a> {
service_name: &'a str,
path: &'a str,
sails_path: &'a str,
tokens: rust::Tokens,
}

impl EventsModuleGenerator {
pub(crate) fn new(service_name: String, path: String) -> Self {
impl<'a> EventsModuleGenerator<'a> {
pub(crate) fn new(service_name: &'a str, path: &'a str, sails_path: &'a str) -> Self {
Self {
service_name,
path,
sails_path,
tokens: rust::Tokens::new(),
}
}
Expand All @@ -23,10 +24,10 @@ impl EventsModuleGenerator {
}
}

impl<'ast> Visitor<'ast> for EventsModuleGenerator {
impl<'a, 'ast> Visitor<'ast> for EventsModuleGenerator<'a> {
fn visit_service(&mut self, service: &'ast Service) {
let events_name = format!("{}Events", self.service_name);
let (service_path_bytes, _) = path_bytes(&self.path);
let (service_path_bytes, _) = path_bytes(self.path);
let event_names_bytes = service
.events()
.iter()
Expand All @@ -39,9 +40,9 @@ impl<'ast> Visitor<'ast> for EventsModuleGenerator {
#[cfg(not(target_arch = "wasm32"))]
pub mod events $("{")
use super::*;
use sails_rs::events::*;
use $(self.sails_path)::events::*;
#[derive(PartialEq, Debug, Encode, Decode)]
#[codec(crate = sails_rs::scale_codec)]
#[codec(crate = $(self.sails_path)::scale_codec)]
pub enum $(&events_name) $("{")
};

Expand Down
21 changes: 11 additions & 10 deletions rs/client-gen/src/io_generators.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
use genco::prelude::*;
use sails_idl_parser::{ast::visitor, ast::visitor::Visitor, ast::*};

use crate::helpers::*;
use crate::type_generators::generate_type_decl_with_path;
use genco::prelude::*;
use sails_idl_parser::{ast::visitor, ast::visitor::Visitor, ast::*};

pub(crate) struct IoModuleGenerator {
path: String,
pub(crate) struct IoModuleGenerator<'a> {
path: &'a str,
sails_path: &'a str,
tokens: rust::Tokens,
}

impl IoModuleGenerator {
pub(crate) fn new(path: String) -> Self {
impl<'a> IoModuleGenerator<'a> {
pub(crate) fn new(path: &'a str, sails_path: &'a str) -> Self {
Self {
path,
sails_path,
tokens: rust::Tokens::new(),
}
}
Expand All @@ -21,21 +22,21 @@ impl IoModuleGenerator {
quote!(
pub mod io {
use super::*;
use sails_rs::calls::ActionIo;
use $(self.sails_path)::calls::ActionIo;
$(self.tokens)
}
)
}
}

impl<'ast> Visitor<'ast> for IoModuleGenerator {
impl<'a, 'ast> Visitor<'ast> for IoModuleGenerator<'a> {
fn visit_service(&mut self, service: &'ast Service) {
visitor::accept_service(service, self);
}

fn visit_service_func(&mut self, func: &'ast ServiceFunc) {
let fn_name = func.name();
let (service_path_bytes, _) = path_bytes(&self.path);
let (service_path_bytes, _) = path_bytes(self.path);
let (route_bytes, _) = method_bytes(fn_name);

let struct_tokens = generate_io_struct(
Expand Down
Loading