aboutsummaryrefslogtreecommitdiff
path: root/derive/src
diff options
context:
space:
mode:
Diffstat (limited to 'derive/src')
-rw-r--r--derive/src/lib.rs12
-rw-r--r--derive/src/network/mod.rs14
-rw-r--r--derive/src/setters/mod.rs12
3 files changed, 31 insertions, 7 deletions
diff --git a/derive/src/lib.rs b/derive/src/lib.rs
index dc6e9fe..71feae7 100644
--- a/derive/src/lib.rs
+++ b/derive/src/lib.rs
@@ -20,11 +20,17 @@ pub fn from(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
from::from(input)
}
-#[proc_macro_derive(Setters, attributes(quassel))]
+#[proc_macro_derive(Setters, attributes(setter, quassel))]
pub fn setters(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
setters::setters(input)
}
+/// Sugar to make sending sync messages nicer
+///
+/// Example:
+/// ```
+/// sync!("requestCreateBufferView", [properties.to_network_map()])
+/// ```
#[proc_macro]
pub fn sync(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
sync::sync(input)
@@ -32,14 +38,14 @@ pub fn sync(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
use darling::FromField;
-#[derive(Debug, FromField)]
+#[derive(Debug, FromField, Clone)]
#[darling(attributes(quassel))]
struct QuasselField {
ident: Option<syn::Ident>,
ty: syn::Type,
#[darling(default)]
- name: String,
+ name: Option<String>,
}
impl QuasselField {
diff --git a/derive/src/network/mod.rs b/derive/src/network/mod.rs
index 7932a12..2d4c89d 100644
--- a/derive/src/network/mod.rs
+++ b/derive/src/network/mod.rs
@@ -91,7 +91,7 @@ pub fn network_map(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
.zip(quassel_fields)
.for_each(|(field, qfield)| {
if field.rename.is_none() {
- field.rename = Some(qfield.name)
+ field.rename = qfield.name
}
});
@@ -169,7 +169,17 @@ pub fn network_list(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let _network = Network::from_derive_input(&input).unwrap();
- let fields = parse_fields(&input);
+ let mut fields = parse_fields(&input);
+ let quassel_fields = super::QuasselField::parse(&input);
+
+ fields
+ .iter_mut()
+ .zip(quassel_fields)
+ .for_each(|(field, qfield)| {
+ if field.rename.is_none() {
+ field.rename = qfield.name
+ }
+ });
let name = &input.ident;
diff --git a/derive/src/setters/mod.rs b/derive/src/setters/mod.rs
index 4436c3c..ac10144 100644
--- a/derive/src/setters/mod.rs
+++ b/derive/src/setters/mod.rs
@@ -6,6 +6,8 @@ use syn::{self, parse_macro_input};
#[derive(Debug, FromField)]
#[darling(attributes(setter))]
pub struct SetterField {
+ ident: Option<syn::Ident>,
+
#[darling(default)]
skip: bool,
@@ -45,8 +47,14 @@ pub fn setters(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
.zip(quassel_fields)
.filter(|(setter_field, _)| !setter_field.skip)
.map(|(setter_field, quassel_field)| {
+ let raw_name = if let Some(name) = &quassel_field.name {
+ name.clone()
+ } else {
+ setter_field.ident.as_ref().unwrap().to_string()
+ };
+
let name: String = {
- let mut name = quassel_field.name.chars();
+ let mut name = raw_name.chars();
format!(
"set{}{}",
@@ -63,7 +71,7 @@ pub fn setters(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
.unwrap_or({
let mut res = String::new();
- for c in quassel_field.name.chars().rev() {
+ for c in raw_name.chars().rev() {
if c <= 'Z' && c >= 'A' {
res.push(c.to_ascii_lowercase());
break;
>2021-06-29add rmr to channels1.3.2Max Audron-1/+1 2021-06-28>.>: add . as eyeMax Audron-1/+1 2021-06-28add lmr to channels1.3.1Max Audron-1/+1 2021-06-23rewrite sed regex to work cross channelMax Audron-115/+141 2021-06-23add required metadata for publishing to macros crateMax Audron-5/+12 2021-06-23add ability to use path and dotted syntax for functionsMax Audron-8/+39 2021-06-21publish macros subcrateMax Audron-20/+20 2021-06-13release version 1.2.1Max Audron-2/+2 * fix crash on empty message 2021-06-13fix crash on message only containing whitespaceMax Audron-1/+4 2021-06-11Release version 1.2.01.2.0Max Audron-2/+2 * add pet command 2021-06-06make pet more compactR0flcopt3r/catinator-pet-commandMax Audron-5/+5 2021-06-05feat: adds pet command.R0flcopt3r-0/+90 When petting the cat it will reply with some random action. 2021-06-05feat: send actionR0flcopt3r-1/+9 2021-06-05release version 1.1.0Max Audron-2/+2 2021-06-05document proc macrosMax Audron-4/+97 2021-06-05add intensifyMax Audron-3/+27 2021-06-05add privmsg macroMax Audron-2/+40 2021-06-05fix jb remote urlsMax Audron-4/+4 2021-06-05remove egress gateway configMax Audron-10/+0 2021-06-05update tanka dependenciesMax Audron-8/+8 2021-06-05fix init container nameMax Audron-1/+1 2021-06-05fix tanka dependency pathMax Audron-8/+8 2021-06-05switch to https url for tanka util libMax Audron-2/+2 2021-06-05bump version to 1.0.2Max Audron-2/+2 2021-06-05add tanka ci configurationMax Audron-1/+1 2021-06-05ready tanka deploy for CIMax Audron-32/+69 2021-06-05remove tanka vendoringMax Audron-27651/+0 2021-05-26Release 1.0.1Max Audron-3/+3 2021-05-26fix log breaking once buffer fullMax Audron-2/+33 the log_msg function was poping the newest message and replacing it with the newest message, it should be poping the oldest messages. 2021-05-16add deployment stuffMax Audron-6/+27786 2021-05-15add container buildMax Audron-2/+35