attributes.rs |
# Attribute definitions for a `InterfaceCollector`.
This module provides some conveniences for working with attribute definitions
from WebIDL. When encountering a weedle `ExtendedAttribute` node, use `TryFrom`
to convert it into an [`Attribute`] representing one of the attributes that we
support. You can also use the [`parse_attributes`] function to parse an
`ExtendedAttributeList` into a vec of same.
We only support a small number of attributes, so it's manageable to have them
all handled by a single abstraction. This might need to be refactored in future
if we grow significantly more complicated attribute handling. |
37878 |
collectors.rs |
# Collects metadata from UDL. |
11563 |
converters |
|
|
finder.rs |
# Helpers for finding the named types defined in a UDL interface.
This module provides the [`TypeFinder`] trait, an abstraction for walking
the weedle parse tree, looking for type definitions, and accumulating them
in a [`TypeCollector`].
The type-finding process only discovers very basic information about names
and their corresponding types. For example, it can discover that "Foobar"
names a Record, but it won't discover anything about the fields of that
record.
Factoring this functionality out into a separate phase makes the subsequent
work of more *detailed* parsing of the UDL a lot simpler, we know how to resolve
names to types when building up the full interface definition. |
16661 |
lib.rs |
# Uniffi support for webidl syntax, typically from a .udl file, as described by weedle.
This library is dedicated to parsing a string in a webidl syntax, as described by
weedle and with our own custom take on the attributes etc, pushing the boundaries
of that syntax to describe a uniffi `MetadataGroup`.
The output of this module is consumed by uniffi_bindgen to generate stuff. |
1551 |
literal.rs |
|
6600 |
resolver.rs |
# Helpers for resolving UDL type expressions into concrete types.
This module provides the [`TypeResolver`] trait, an abstraction for walking
the parse tree of a weedle type expression and using a [`TypeCollector`] to
convert it into a concrete type definition (so it assumes that you're already
used a [`TypeFinder`](super::TypeFinder) to populate the universe).
Perhaps most importantly, it knows how to error out if the UDL tries to reference
an undefined or invalid type. |
10427 |