/// Request messages sent from consumer to producer pub enum Request { GetValue, Close, } /// Response messages sent from producer to consumer pub enum Response { Value(T), NoSource, Closed, } /// Represents the source of values: either static or dynamic pub(crate) enum ValueSource { Static(T), Dynamic(Box T + Send + Sync + 'static>), None, } /// Internal channel state shared between producer and consumer pub(crate) struct ChannelState { pub(crate) source: ValueSource, pub(crate) closed: bool, }