Rewrite From/TryFrom conversions on generated types to avoid future orphan rule violations (#34554)

* script: Add traits to allow converting between types that are not defined in the script crate.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* script: Rewrite all From/TryFrom implementations on generated WebIDL types to use new Convert/TryConvert traits.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
This commit is contained in:
Josh Matthews 2024-12-11 00:52:48 -05:00 committed by GitHub
parent e10e989abb
commit e0cbab2fbb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
40 changed files with 439 additions and 380 deletions

View file

@ -14,6 +14,7 @@ use servo_media::audio::oscillator_node::{
};
use servo_media::audio::param::ParamType;
use crate::conversions::Convert;
use crate::dom::audioparam::AudioParam;
use crate::dom::audioscheduledsourcenode::AudioScheduledSourceNode;
use crate::dom::baseaudiocontext::BaseAudioContext;
@ -50,7 +51,7 @@ impl OscillatorNode {
.parent
.unwrap_or(2, ChannelCountMode::Max, ChannelInterpretation::Speakers);
let source_node = AudioScheduledSourceNode::new_inherited(
AudioNodeInit::OscillatorNode(options.into()),
AudioNodeInit::OscillatorNode(options.convert()),
context,
node_options,
0, /* inputs */
@ -150,26 +151,26 @@ impl OscillatorNodeMethods<crate::DomTypeHolder> for OscillatorNode {
self.source_node
.node()
.message(AudioNodeMessage::OscillatorNode(
OscillatorNodeMessage::SetOscillatorType(type_.into()),
OscillatorNodeMessage::SetOscillatorType(type_.convert()),
));
Ok(())
}
}
impl<'a> From<&'a OscillatorOptions> for ServoMediaOscillatorOptions {
fn from(options: &'a OscillatorOptions) -> Self {
Self {
oscillator_type: options.type_.into(),
freq: *options.frequency,
detune: *options.detune,
impl<'a> Convert<ServoMediaOscillatorOptions> for &'a OscillatorOptions {
fn convert(self) -> ServoMediaOscillatorOptions {
ServoMediaOscillatorOptions {
oscillator_type: self.type_.convert(),
freq: *self.frequency,
detune: *self.detune,
periodic_wave_options: None, // XXX
}
}
}
impl From<OscillatorType> for ServoMediaOscillatorType {
fn from(oscillator_type: OscillatorType) -> Self {
match oscillator_type {
impl Convert<ServoMediaOscillatorType> for OscillatorType {
fn convert(self) -> ServoMediaOscillatorType {
match self {
OscillatorType::Sine => ServoMediaOscillatorType::Sine,
OscillatorType::Square => ServoMediaOscillatorType::Square,
OscillatorType::Sawtooth => ServoMediaOscillatorType::Sawtooth,