amadeus_core/into_par_stream/
slice.rs1use futures::Stream;
2use serde::{Deserialize, Deserializer, Serialize, Serializer};
3use std::{
4 convert::Infallible, iter, pin::Pin, slice, task::{Context, Poll}
5};
6
7use super::{
8 DistributedStream, IntoDistributedStream, IntoParallelStream, IterDistStream, IterParStream, ParallelStream, StreamTask
9};
10use crate::pool::ProcessSend;
11
12impl_par_dist_rename! {
13 impl<T> IntoParallelStream for [T]
14 where
15 T: Send + 'static,
16 {
17 type ParStream = Never;
18 type Item = Never;
19
20 fn into_par_stream(self) -> Self::ParStream
21 where
22 Self: Sized,
23 {
24 unreachable!()
25 }
26 }
27
28 impl<'a, T: Clone> IntoParallelStream for &'a [T]
29 where
30 T: Send + 'static,
31 {
32 type ParStream = IterParStream<iter::Cloned<slice::Iter<'a, T>>>;
33 type Item = T;
34
35 #[inline]
36 fn into_par_stream(self) -> Self::ParStream
37 where
38 Self: Sized,
39 {
40 IterParStream(self.iter().cloned())
41 }
42 }
43
44 impl ParallelStream for Never {
45 type Item = Self;
46 type Task = Self;
47
48 fn size_hint(&self) -> (usize, Option<usize>) {
49 unreachable!()
50 }
51 fn next_task(self: Pin<&mut Self>, _cx: &mut Context) -> Poll<Option<Self::Task>> {
52 unreachable!()
53 }
54 }
55}
56
57pub struct Never(Infallible);
58
59impl StreamTask for Never {
60 type Item = Self;
61 type Async = Self;
62
63 fn into_async(self) -> Self::Async {
64 self
65 }
66}
67impl Stream for Never {
68 type Item = Self;
69
70 fn poll_next(self: Pin<&mut Self>, _cx: &mut Context) -> Poll<Option<Self::Item>> {
71 unreachable!()
72 }
73}
74
75impl Serialize for Never {
76 fn serialize<S>(&self, _serializer: S) -> Result<S::Ok, S::Error>
77 where
78 S: Serializer,
79 {
80 unreachable!()
81 }
82}
83impl<'de> Deserialize<'de> for Never {
84 fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
85 where
86 D: Deserializer<'de>,
87 {
88 unreachable!()
89 }
90}