From 8ced4af74b6331c18af14d3aa0af9a873e4b64d7 Mon Sep 17 00:00:00 2001 From: Samuel Sarle Date: Thu, 12 Dec 2024 22:27:48 +0200 Subject: [PATCH] Add `protoflow_blocks::System::const_bytes` helper --- lib/protoflow-blocks/src/blocks/core.rs | 4 +++- lib/protoflow-blocks/src/system.rs | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/protoflow-blocks/src/blocks/core.rs b/lib/protoflow-blocks/src/blocks/core.rs index 15557ba0..f6f4e760 100644 --- a/lib/protoflow-blocks/src/blocks/core.rs +++ b/lib/protoflow-blocks/src/blocks/core.rs @@ -2,7 +2,7 @@ pub mod core { use super::{ - prelude::{vec, Box, Cow, Named, Vec}, + prelude::{vec, Box, Bytes, Cow, Named, Vec}, BlockConnections, BlockInstantiation, InputPortName, OutputPortName, System, }; use crate::{ @@ -14,6 +14,8 @@ pub mod core { pub trait CoreBlocks { fn buffer + 'static>(&mut self) -> Buffer; + fn const_bytes>(&mut self, value: T) -> Const; + fn const_string(&mut self, value: impl ToString) -> Const; fn count(&mut self) -> Count; diff --git a/lib/protoflow-blocks/src/system.rs b/lib/protoflow-blocks/src/system.rs index 695ccfba..2c7d648c 100644 --- a/lib/protoflow-blocks/src/system.rs +++ b/lib/protoflow-blocks/src/system.rs @@ -3,7 +3,7 @@ #![allow(dead_code)] use crate::{ - prelude::{fmt, Arc, Box, FromStr, Rc, String, ToString}, + prelude::{fmt, Arc, Box, Bytes, FromStr, Rc, String, ToString}, types::{DelayType, Encoding}, AllBlocks, Buffer, ConcatStrings, Const, CoreBlocks, Count, Decode, DecodeCsv, DecodeHex, DecodeJson, Delay, Drop, Encode, EncodeCsv, EncodeHex, EncodeJson, FlowBlocks, HashBlocks, @@ -133,6 +133,11 @@ impl CoreBlocks for System { self.0.block(Buffer::::with_system(self)) } + fn const_bytes>(&mut self, value: T) -> Const { + self.0 + .block(Const::::with_system(self, value.into())) + } + fn const_string(&mut self, value: impl ToString) -> Const { self.0 .block(Const::::with_system(self, value.to_string())) @@ -308,3 +313,19 @@ impl TextBlocks for System { .block(SplitString::with_system(self, Some(delimiter.to_string()))) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn const_bytes_accepts_various_types() { + let _ = System::build(|s| { + let _ = s.const_bytes("Hello world"); + let _ = s.const_bytes("Hello world".to_string()); + let _ = s.const_bytes(&b"Hello world"[..]); + let _ = s.const_bytes(b"Hello world".to_vec()); + let _ = s.const_bytes(Bytes::from("Hello world")); + }); + } +}