const_panic/macros/
concat_macro.rs1use crate::ArrayString;
2
3use typewit::{MakeTypeWitness, TypeEq, TypeWitnessTypeArg};
4
5#[cfg_attr(feature = "docsrs", doc(cfg(feature = "non_basic")))]
38#[macro_export]
39macro_rules! concat_ {
40 () => ("");
41 ($($args:tt)*) => ({
42 const fn __func_zxe7hgbnjs<Ret_ZXE7HGBNJS, const CAP_ZXE7HGBNJS: $crate::__::usize>(
43 cmd: $crate::__::ConcatCmd<Ret_ZXE7HGBNJS, CAP_ZXE7HGBNJS>
44 ) -> Ret_ZXE7HGBNJS {
45 $crate::__concat_func_setup!{
46 (|args| {
47 match cmd {
48 $crate::__::ConcatCmd::ComputeLength(te) =>
49 te.to_left($crate::__::compute_length(args)),
50 $crate::__::ConcatCmd::BuildArray(te) =>
51 te.to_left($crate::__::make_panic_string_unwrapped(args)),
52 }
53 })
54 []
55 [$($args)*,]
56 }
57 }
58
59 const LEN_ZXE7HGBNJS: $crate::__::usize = __func_zxe7hgbnjs($crate::__::MakeTypeWitness::MAKE);
60
61 const AS_ZXE7HGBNJS: $crate::ArrayString<LEN_ZXE7HGBNJS> =
62 __func_zxe7hgbnjs($crate::__::MakeTypeWitness::MAKE);
63
64 const S_ZXE7HGBNJS: &$crate::__::str = AS_ZXE7HGBNJS.to_str();
65
66 S_ZXE7HGBNJS
67 })
68}
69
70#[doc(hidden)]
71pub enum ConcatCmd<Ret, const CAP: usize> {
72 ComputeLength(TypeEq<Ret, usize>),
73 BuildArray(TypeEq<Ret, ArrayString<CAP>>),
74}
75
76impl<Ret, const CAP: usize> TypeWitnessTypeArg for ConcatCmd<Ret, CAP> {
77 type Arg = Ret;
78}
79
80impl MakeTypeWitness for ConcatCmd<usize, 0> {
81 const MAKE: Self = Self::ComputeLength(TypeEq::NEW);
82}
83
84impl<const CAP: usize> MakeTypeWitness for ConcatCmd<ArrayString<CAP>, CAP> {
85 const MAKE: Self = Self::BuildArray(TypeEq::NEW);
86}