mirror of
https://github.com/System-End/slack-morphism-rust.git
synced 2026-04-20 00:25:23 +00:00
DSL fixes
This commit is contained in:
parent
9264cf3330
commit
2020ed1cc6
6 changed files with 77 additions and 35 deletions
|
|
@ -17,3 +17,4 @@ chrono = { version = "0.4", features = ["serde"] }
|
|||
hyper = "0.13"
|
||||
log = "0.4"
|
||||
fern = { version = "0.6", features = ["colored"] }
|
||||
rsb_derive = "0.2"
|
||||
|
|
@ -14,6 +14,9 @@ use log::*;
|
|||
|
||||
use std::sync::Arc;
|
||||
|
||||
mod templates;
|
||||
//use templates::*;
|
||||
|
||||
#[allow(dead_code)]
|
||||
async fn test_client() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
let sb: SlackSectionBlock = SlackSectionBlock::new().with_block_id("test".into());
|
||||
|
|
@ -23,7 +26,7 @@ async fn test_client() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
|||
|
||||
let section_block = SlackSectionBlock::new()
|
||||
.with_text(md!("hey, {}", 10))
|
||||
.with_fields(slack_items![
|
||||
.with_fields(slack_blocks![
|
||||
some(md!("hey1")),
|
||||
some(pt!("hey2")),
|
||||
optionally( sb_ser.is_empty() => md!("hey"))
|
||||
|
|
@ -37,19 +40,19 @@ async fn test_client() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
|||
);
|
||||
|
||||
let context_block: SlackContextBlock = SlackContextBlock::new(slack_blocks![
|
||||
some(SlackBlockImageElement::new(
|
||||
some_into(SlackBlockImageElement::new(
|
||||
"http://example.net/img1".into(),
|
||||
"text 1".into()
|
||||
)),
|
||||
some(SlackBlockImageElement::new(
|
||||
some_into(SlackBlockImageElement::new(
|
||||
"http://example.net/img2".into(),
|
||||
"text 2".into()
|
||||
))
|
||||
]);
|
||||
|
||||
let blocks: Vec<SlackBlock> = slack_blocks![
|
||||
some ( section_block ),
|
||||
optionally( !sb_ser.is_empty() => context_block)
|
||||
some_into ( section_block ),
|
||||
optionally_into( !sb_ser.is_empty() => context_block )
|
||||
];
|
||||
|
||||
println!("{:#?}", blocks);
|
||||
|
|
|
|||
26
src/examples/src/templates.rs
Normal file
26
src/examples/src/templates.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
use rsb_derive::Builder;
|
||||
use slack_morphism_models::blocks::*;
|
||||
use slack_morphism_models::*;
|
||||
|
||||
#[derive(Debug, Clone, Builder)]
|
||||
pub struct WelcomeMessageTemplateParams {
|
||||
user_id: SlackUserId,
|
||||
}
|
||||
|
||||
impl SlackMessageTemplate for WelcomeMessageTemplateParams {
|
||||
fn render_template(&self) -> SlackMessageContent {
|
||||
SlackMessageContent::new()
|
||||
.with_text(format!("Hey {}", Self::fmt_user_id(&self.user_id)))
|
||||
.with_blocks(slack_blocks![
|
||||
some_into(
|
||||
SlackSectionBlock::new()
|
||||
.with_text(md!("Hey {}", Self::fmt_user_id(&self.user_id)))
|
||||
),
|
||||
some_into(SlackDividerBlock::new()),
|
||||
some_into(SlackContextBlock::new(slack_blocks![
|
||||
some_into(SlackBlockImageElement::new("".into(), "".into())),
|
||||
some(md!("This is an example of block message"))
|
||||
]))
|
||||
])
|
||||
}
|
||||
}
|
||||
|
|
@ -23,25 +23,10 @@ macro_rules! pt {
|
|||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! slack_optional_item {
|
||||
macro_rules! slack_block_item {
|
||||
(optionally ($pred:expr => $item:expr)) => {{
|
||||
if $pred {
|
||||
Some($item)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}};
|
||||
|
||||
(some $item:expr) => {{
|
||||
Some($item)
|
||||
}};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! slack_optional_item_into {
|
||||
(optionally ($pred:expr => $item:expr)) => {{
|
||||
if $pred {
|
||||
slack_optional_item_into! (some $item)
|
||||
slack_block_item! (some $item)
|
||||
}
|
||||
else {
|
||||
None
|
||||
|
|
@ -49,6 +34,19 @@ macro_rules! slack_optional_item_into {
|
|||
}};
|
||||
|
||||
(some $item:expr) => {{
|
||||
Some($item)
|
||||
}};
|
||||
|
||||
(optionally_into ($pred:expr => $item:expr)) => {{
|
||||
if $pred {
|
||||
slack_block_item! (some_into $item)
|
||||
}
|
||||
else {
|
||||
None
|
||||
}
|
||||
}};
|
||||
|
||||
(some_into $item:expr ) => {{
|
||||
Some($item.into())
|
||||
}};
|
||||
}
|
||||
|
|
@ -60,19 +58,7 @@ macro_rules! slack_blocks {
|
|||
|
||||
($($pred : tt($item:expr $(=> $item_r:expr)?)),+) => {{
|
||||
vec![
|
||||
$(slack_optional_item_into! ($pred($item $(=> $item_r)?))),*
|
||||
$(slack_block_item! ($pred($item $(=> $item_r)?))),*
|
||||
].into_iter().flatten().collect()
|
||||
}};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! slack_items {
|
||||
() => { vec![] };
|
||||
|
||||
($($pred : tt($item:expr $(=> $item_r:expr)?)),+) => {{
|
||||
let items = vec![
|
||||
$(slack_optional_item! ($pred($item $(=> $item_r)?))),*
|
||||
];
|
||||
items.into_iter().flatten().collect()
|
||||
}};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@ use rsb_derive::Builder;
|
|||
use serde::{Deserialize, Serialize};
|
||||
use serde_with::skip_serializing_none;
|
||||
|
||||
mod templates;
|
||||
|
||||
pub use templates::*;
|
||||
|
||||
#[skip_serializing_none]
|
||||
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
|
||||
pub struct SlackMessageOrigin {
|
||||
|
|
|
|||
22
src/models/src/messages/templates.rs
Normal file
22
src/models/src/messages/templates.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
use rvstruct::ValueStruct;
|
||||
|
||||
use crate::{SlackMessageContent, SlackUserId};
|
||||
use chrono::prelude::*;
|
||||
|
||||
pub trait SlackMessageTemplate {
|
||||
fn render_template(&self) -> SlackMessageContent;
|
||||
|
||||
fn fmt_user_id(uid: &SlackUserId) -> String {
|
||||
format!("<@${}", uid.value())
|
||||
}
|
||||
|
||||
fn fmt_date<TZ: TimeZone>(date: DateTime<TZ>) -> String {
|
||||
format!(
|
||||
"<!date^${timestamp}^${token_string}${link_part}|${fallback}>",
|
||||
timestamp = date.timestamp(),
|
||||
token_string = "",
|
||||
link_part = "",
|
||||
fallback = ""
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue