Skip to content

Commit

Permalink
expose struct fields as Derive attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
ynqa committed Mar 15, 2024
1 parent 097b606 commit 71f76a6
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 14 deletions.
9 changes: 6 additions & 3 deletions promkit-derive/examples/example.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
use promkit::Result;
use promkit::{Result, crossterm::style::Color, style::StyleBuilder};
use promkit_derive::Promkit;

#[derive(Default, Debug, Promkit)]
struct MyStruct {
#[ask(prefix = "What is your name?", a = "makoto")]
#[ask(
prefix = "What is your name?",
prefix_style = StyleBuilder::new().fgc(Color::DarkCyan).build(),
)]
name: String,

#[ask(prefix = "What is your name?", a = "makoto")]
#[ask(prefix = "What is your name?", ignore_invalid_attr = "ynqa")]
age: usize,
}

Expand Down
40 changes: 29 additions & 11 deletions promkit-derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,21 @@ pub fn promkit_derive(input: TokenStream) -> TokenStream {

let mut ask_fns = quote! {};

let mut prefix = Default::default();
let mut prefix = quote! { String::from("❯❯ ") };
let mut mask = quote! { Default::default() };
let mut prefix_style = quote! {
promkit::style::StyleBuilder::new()
.fgc(promkit::crossterm::style::Color::DarkGreen)
.build()
};
let mut active_char_style = quote! {
promkit::style::StyleBuilder::new()
.bgc(promkit::crossterm::style::Color::DarkCyan)
.build()
};
let mut inactive_char_style = quote! {
promkit::style::StyleBuilder::new().build()
};

for field in fields.iter() {
for attr in field
Expand Down Expand Up @@ -50,8 +64,16 @@ pub fn promkit_derive(input: TokenStream) -> TokenStream {
match entry.path.get_ident().unwrap().to_string().as_str() {
"prefix" => {
let expr = entry.value;
prefix = quote! { format!("{}", #expr) };
}
prefix = quote! { format!("{} ", #expr) };
},
"mask" => {
let expr = entry.value;
mask = quote! { format!("{} ", #expr) };
},
"prefix_style" => {
let expr = entry.value;
prefix_style = quote! { #expr };
},
_ => (),
}
});
Expand All @@ -75,14 +97,10 @@ pub fn promkit_derive(input: TokenStream) -> TokenStream {
texteditor: Default::default(),
history: Default::default(),
prefix: #prefix,
mask: Default::default(),
prefix_style: promkit::style::StyleBuilder::new()
.fgc(promkit::crossterm::style::Color::DarkGreen)
.build(),
active_char_style: promkit::style::StyleBuilder::new()
.bgc(promkit::crossterm::style::Color::DarkCyan)
.build(),
inactive_char_style: promkit::style::StyleBuilder::new().build(),
mask: #mask,
prefix_style: #prefix_style,
active_char_style: #active_char_style,
inactive_char_style: #inactive_char_style,
edit_mode: Default::default(),
lines: Default::default(),
},
Expand Down

0 comments on commit 71f76a6

Please sign in to comment.