amadeus_core/into_par_stream/
slice.rs

1use 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}