Skip to content

Commit

Permalink
chore(sails-rs): move ProgramMeta and ServiceMeta to new crate (#588)
Browse files Browse the repository at this point in the history
  • Loading branch information
vobradovich authored Oct 21, 2024
1 parent 97cd872 commit 329b8c3
Show file tree
Hide file tree
Showing 12 changed files with 99 additions and 82 deletions.
12 changes: 11 additions & 1 deletion Cargo.lock

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

8 changes: 5 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,21 @@ members = [
"rs/cli",
"rs/client-gen",
"rs/idl-gen",
"rs/idl-meta",
"rs/idl-parser",
"rs/macros",
"rs/macros/core",
]

[workspace.dependencies]
# The order matches with publishing order.
sails-macros-core = { path = "rs/macros/core" }
sails-macros = { path = "rs/macros" }
sails-idl-meta = { path = "rs/idl-meta" }
sails-idl-gen = { path = "rs/idl-gen" }
sails-idl-parser = { path = "rs/idl-parser" }
sails-client-gen = { path = "rs/client-gen" }
sails-macros-core = { path = "rs/macros/core" }
sails-macros = { path = "rs/macros" }
sails-rs = { path = "rs" }
sails-idl-gen = { path = "rs/idl-gen" }
# Renamed sails-rs for `proxy` demo
sails-rename = { package = "sails-rs", path = "rs" }

Expand Down
3 changes: 3 additions & 0 deletions rs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ hashbrown.workspace = true
hex.workspace = true
mockall = { workspace = true, optional = true }
parity-scale-codec = { workspace = true, features = ["derive"] }
sails-idl-gen = { workspace = true, optional = true }
sails-idl-meta.workspace = true
sails-macros = { workspace = true, optional = true }
scale-info = { workspace = true, features = ["derive", "docs"] }
spin.workspace = true
Expand All @@ -38,5 +40,6 @@ ethexe = ["gstd?/ethexe"]
gclient = ["dep:gclient"]
gstd = ["dep:gstd", "dep:gear-core", "dep:sails-macros"]
gtest = ["dep:gtest"]
idl-gen = ["dep:sails-idl-gen"]
mockall = ["dep:mockall"]
wasm-builder = ["dep:gwasm-builder"]
8 changes: 4 additions & 4 deletions rs/idl-gen/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ repository.workspace = true

[dependencies]
convert-case.workspace = true
gprimitives.workspace = true
handlebars.workspace = true
sails-rs.workspace = true
scale-info = { workspace = true, features = ["serde"] }
serde.workspace = true
sails-idl-meta.workspace = true
scale-info = { workspace = true, features = ["derive", "docs", "serde"] }
serde = { workspace = true, features = ["derive"] }
serde-json.workspace = true
thiserror.workspace = true

[dev-dependencies]
insta.workspace = true
sails-idl-parser.workspace = true
scale-info = { workspace = true, features = ["derive"] }
4 changes: 2 additions & 2 deletions rs/idl-gen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const VARIANT_TEMPLATE: &str = include_str!("../hbs/variant.hbs");

pub mod program {
use super::*;
use sails_rs::meta::ProgramMeta;
use sails_idl_meta::ProgramMeta;

pub fn generate_idl<P: ProgramMeta>(idl_writer: impl Write) -> Result<()> {
render_idl(
Expand All @@ -42,7 +42,7 @@ pub mod program {

pub mod service {
use super::*;
use sails_rs::meta::{AnyServiceMeta, ServiceMeta};
use sails_idl_meta::{AnyServiceMeta, ServiceMeta};

pub fn generate_idl<S: ServiceMeta>(idl_writer: impl Write) -> Result<()> {
render_idl(
Expand Down
3 changes: 2 additions & 1 deletion rs/idl-gen/src/meta.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ use crate::{
errors::{Error, Result},
type_names,
};
use sails_rs::{meta::AnyServiceMeta, ActorId, CodeId, MessageId, NonZeroU256, H160, H256, U256};
use gprimitives::*;
use sails_idl_meta::*;
use scale_info::{
form::PortableForm, Field, MetaType, PortableRegistry, PortableType, Registry, TypeDef, Variant,
};
Expand Down
8 changes: 3 additions & 5 deletions rs/idl-gen/src/type_names.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,12 @@
use crate::errors::{Error, Result};
use convert_case::{Case, Casing};
use sails_rs::scale_info::{
use core::num::{NonZeroU128, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8};
use gprimitives::*;
use scale_info::{
form::PortableForm, PortableType, Type, TypeDef, TypeDefArray, TypeDefPrimitive,
TypeDefSequence, TypeDefTuple, TypeInfo,
};
use sails_rs::{
ActorId, CodeId, MessageId, NonZeroU128, NonZeroU16, NonZeroU256, NonZeroU32, NonZeroU64,
NonZeroU8, H160, H256, U256,
};
use std::{
collections::{BTreeMap, HashMap},
rc::Rc,
Expand Down
17 changes: 3 additions & 14 deletions rs/idl-gen/tests/generator.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
use gprimitives::*;
use meta_params::*;
use sails_idl_gen::{program, service};
use sails_rs::{
meta::{AnyServiceMeta, ProgramMeta, ServiceMeta as RtlServiceMeta},
scale_info::{MetaType, StaticTypeInfo, TypeInfo},
H256, U256,
};
use sails_idl_meta::{AnyServiceMeta, ProgramMeta, ServiceMeta as RtlServiceMeta};
use scale_info::{MetaType, StaticTypeInfo, TypeInfo};
use std::{collections::BTreeMap, result::Result as StdResult};

#[allow(dead_code)]
Expand All @@ -13,15 +11,13 @@ mod types {

/// GenericStruct docs
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
pub struct GenericStruct<T> {
/// GenericStruct field `p1`
pub p1: T,
}

/// GenericConstStruct docs
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
pub struct GenericConstStruct<const N: usize> {
/// GenericStruct field `field`
field: [u8; N],
Expand All @@ -30,7 +26,6 @@ mod types {
/// GenericEnum docs
/// with two lines
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
pub enum GenericEnum<T1, T2> {
/// GenericEnum `Variant1` of type 'T1'
Variant1(T1),
Expand All @@ -40,11 +35,9 @@ mod types {

/// TupleStruct docs
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
pub struct TupleStruct(bool);

#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
pub enum ManyVariants {
One,
Two(u32),
Expand Down Expand Up @@ -115,7 +108,6 @@ mod meta_params {

#[allow(dead_code)]
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
enum CommandsMeta {
/// Some description
DoThis(DoThisParams, String),
Expand All @@ -134,7 +126,6 @@ enum BaseCommandsMeta {

#[allow(dead_code)]
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
enum QueriesMeta {
/// This is a query
This(ThisParams, StdResult<(String, u32), String>),
Expand All @@ -152,7 +143,6 @@ enum BaseQueriesMeta {

#[allow(dead_code)]
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
enum EventsMeta {
/// `This` Done
ThisDone(u32),
Expand Down Expand Up @@ -247,7 +237,6 @@ impl ProgramMeta for TestProgramWithEmptyCtorsMeta {

#[allow(dead_code)]
#[derive(TypeInfo)]
#[scale_info(crate = sails_rs::scale_info)]
enum NonEmptyCtorsMeta {
/// This is New constructor
New(NoParams),
Expand Down
12 changes: 12 additions & 0 deletions rs/idl-meta/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[package]
name = "sails-idl-meta"
description = "IDL meta information for the Sails framework"
documentation = "https://docs.rs/sails-idl-gen"
version.workspace = true
authors.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true

[dependencies]
scale-info.workspace = true
49 changes: 49 additions & 0 deletions rs/idl-meta/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#![no_std]

use scale_info::{prelude::vec::Vec, MetaType};

pub trait ServiceMeta {
fn commands() -> MetaType;
fn queries() -> MetaType;
fn events() -> MetaType;
fn base_services() -> impl Iterator<Item = AnyServiceMeta>;
}

pub struct AnyServiceMeta {
commands: MetaType,
queries: MetaType,
events: MetaType,
base_services: Vec<AnyServiceMeta>,
}

impl AnyServiceMeta {
pub fn new<S: ServiceMeta>() -> Self {
Self {
commands: S::commands(),
queries: S::queries(),
events: S::events(),
base_services: S::base_services().collect(),
}
}

pub fn commands(&self) -> &MetaType {
&self.commands
}

pub fn queries(&self) -> &MetaType {
&self.queries
}

pub fn events(&self) -> &MetaType {
&self.events
}

pub fn base_services(&self) -> impl Iterator<Item = &AnyServiceMeta> {
self.base_services.iter()
}
}

pub trait ProgramMeta {
fn constructors() -> MetaType;
fn services() -> impl Iterator<Item = (&'static str, AnyServiceMeta)>;
}
55 changes: 4 additions & 51 deletions rs/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ extern crate std;
pub use gwasm_builder::build as build_wasm;
pub use hex::{self};
pub use prelude::*;
#[cfg(feature = "idl-gen")]
#[cfg(not(target_arch = "wasm32"))]
pub use sails_idl_gen::{generate_idl, generate_idl_to_file};
pub use sails_idl_meta::{self as meta};
pub use spin::{self};

pub mod calls;
Expand All @@ -28,54 +32,3 @@ pub mod gtest;
pub mod mockall;
pub mod prelude;
mod types;

pub mod meta {
use crate::Vec;
use scale_info::MetaType;

pub trait ServiceMeta {
fn commands() -> MetaType;
fn queries() -> MetaType;
fn events() -> MetaType;
fn base_services() -> impl Iterator<Item = AnyServiceMeta>;
}

pub struct AnyServiceMeta {
commands: MetaType,
queries: MetaType,
events: MetaType,
base_services: Vec<AnyServiceMeta>,
}

impl AnyServiceMeta {
pub fn new<S: ServiceMeta>() -> Self {
Self {
commands: S::commands(),
queries: S::queries(),
events: S::events(),
base_services: S::base_services().collect(),
}
}

pub fn commands(&self) -> &MetaType {
&self.commands
}

pub fn queries(&self) -> &MetaType {
&self.queries
}

pub fn events(&self) -> &MetaType {
&self.events
}

pub fn base_services(&self) -> impl Iterator<Item = &AnyServiceMeta> {
self.base_services.iter()
}
}

pub trait ProgramMeta {
fn constructors() -> MetaType;
fn services() -> impl Iterator<Item = (&'static str, AnyServiceMeta)>;
}
}
2 changes: 1 addition & 1 deletion rust-toolchain.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
channel = "stable"
targets = ["wasm32-unknown-unknown"]
profile = "minimal"
components = ["rustfmt", "clippy"]
components = ["rustfmt", "clippy", "rust-src"]

0 comments on commit 329b8c3

Please sign in to comment.