aboutsummaryrefslogtreecommitdiffstats
path: root/components/script_bindings/iterable.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2025-02-23 09:25:46 -0500
committerGitHub <noreply@github.com>2025-02-23 14:25:46 +0000
commit381e168877d1ddba81a73493ca8e2814ae9b07c3 (patch)
treed2fc48902138717013a6f8c11d6eb4bf381355b7 /components/script_bindings/iterable.rs
parent0383ba9a5b940de76823462ebc1b95298ea50903 (diff)
downloadservo-381e168877d1ddba81a73493ca8e2814ae9b07c3.tar.gz
servo-381e168877d1ddba81a73493ca8e2814ae9b07c3.zip
Move more bindings types to script_bindings (#35620)
* Move weak references implementation to script_bindings. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Move maplike/setlike definitions to script_bindings. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Move base error types to script_bindings. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Formatting. Signed-off-by: Josh Matthews <josh@joshmatthews.net> --------- Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Diffstat (limited to 'components/script_bindings/iterable.rs')
-rw-r--r--components/script_bindings/iterable.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/components/script_bindings/iterable.rs b/components/script_bindings/iterable.rs
new file mode 100644
index 00000000000..61cd4540bae
--- /dev/null
+++ b/components/script_bindings/iterable.rs
@@ -0,0 +1,40 @@
+/* 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/. */
+
+use js::conversions::ToJSValConvertible;
+
+use crate::utils::DOMClass;
+
+/// The values that an iterator will iterate over.
+#[derive(JSTraceable, MallocSizeOf)]
+pub enum IteratorType {
+ /// The keys of the iterable object.
+ Keys,
+ /// The values of the iterable object.
+ Values,
+ /// The keys and values of the iterable object combined.
+ Entries,
+}
+
+/// A DOM object that can be iterated over using a pair value iterator.
+pub trait Iterable {
+ /// The type of the key of the iterator pair.
+ type Key: ToJSValConvertible;
+ /// The type of the value of the iterator pair.
+ type Value: ToJSValConvertible;
+ /// Return the number of entries that can be iterated over.
+ fn get_iterable_length(&self) -> u32;
+ /// Return the value at the provided index.
+ fn get_value_at_index(&self, index: u32) -> Self::Value;
+ /// Return the key at the provided index.
+ fn get_key_at_index(&self, index: u32) -> Self::Key;
+}
+
+/// A version of the [IDLInterface] trait that is specific to types that have
+/// iterators defined for them. This allows the `script` crate to define the
+/// derives check for the concrete interface type, while the [IteratableIterator]
+/// type defined in this module can be parameterized over an unknown generic.
+pub trait IteratorDerives {
+ fn derives(class: &'static DOMClass) -> bool;
+}