1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
// ┃ Copyright: (c) 2023, Mike 'PhiSyX' S. (https://github.com/PhiSyX)         ┃
// ┃ SPDX-License-Identifier: MPL-2.0                                          ┃
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
// ┃                                                                           ┃
// ┃  This Source Code Form is subject to the terms of the Mozilla Public      ┃
// ┃  License, v. 2.0. If a copy of the MPL was not distributed with this      ┃
// ┃  file, You can obtain one at https://mozilla.org/MPL/2.0/.                ┃
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

// --------- //
// Structure //
// --------- //

#[derive(Clone)]
pub struct RouteCollection<UserState>(Vec<super::Route<UserState>>);

// -------------- //
// Implémentation //
// -------------- //

impl<US> RouteCollection<US> {
	#[allow(clippy::new_without_default)]
	pub fn new() -> Self {
		Self(Default::default())
	}
}

impl<US> RouteCollection<US> {
	/// Retourne toutes les routes de la collection.
	pub fn all(&self) -> impl Iterator<Item = &super::Route<US>> {
		self.0.iter()
	}
}

impl<US> RouteCollection<US> {
	/// Ajoute un router à la collection de route.
	#[allow(clippy::should_implement_trait)]
	pub fn add(mut self, router: super::Router<US>) -> Self {
		assert!(router.action.is_some());

		self.0.push(super::Route {
			action: router.action.unwrap().to_owned(),
			fullpath: router.fullpath,
			name: Some(router.name),
			methods: router.methods,
		});

		self
	}

	/// Étend une collection de routes avec la collection de routes déjà en
	/// place.
	pub fn extend(&mut self, this: Self)
	where
		US: Clone,
	{
		self.0.extend(this.0.to_vec());
	}
}