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

@ -13,6 +13,7 @@ use servo_media::audio::panner_node::{
};
use servo_media::audio::param::{ParamDir, ParamType};
use crate::conversions::Convert;
use crate::dom::audionode::AudioNode;
use crate::dom::audioparam::AudioParam;
use crate::dom::baseaudiocontext::BaseAudioContext;
@ -86,7 +87,7 @@ impl PannerNode {
if *options.coneOuterGain < 0. || *options.coneOuterGain > 1. {
return Err(Error::InvalidState);
}
let options = options.into();
let options = options.convert();
let node = AudioNode::new_inherited(
AudioNodeInit::PannerNode(options),
context,
@ -255,7 +256,7 @@ impl PannerNodeMethods<crate::DomTypeHolder> for PannerNode {
}
// https://webaudio.github.io/web-audio-api/#dom-pannernode-distancemodel
fn SetDistanceModel(&self, model: DistanceModelType) {
self.distance_model.set(model.into());
self.distance_model.set(model.convert());
let msg = PannerNodeMessage::SetDistanceModel(self.distance_model.get());
self.upcast::<AudioNode>()
.message(AudioNodeMessage::PannerNode(msg));
@ -269,7 +270,7 @@ impl PannerNodeMethods<crate::DomTypeHolder> for PannerNode {
}
// https://webaudio.github.io/web-audio-api/#dom-pannernode-panningmodel
fn SetPanningModel(&self, model: PanningModelType) {
self.panning_model.set(model.into());
self.panning_model.set(model.convert());
let msg = PannerNodeMessage::SetPanningModel(self.panning_model.get());
self.upcast::<AudioNode>()
.message(AudioNodeMessage::PannerNode(msg));
@ -372,30 +373,30 @@ impl PannerNodeMethods<crate::DomTypeHolder> for PannerNode {
}
}
impl<'a> From<&'a PannerOptions> for PannerNodeOptions {
fn from(options: &'a PannerOptions) -> Self {
Self {
panning_model: options.panningModel.into(),
distance_model: options.distanceModel.into(),
position_x: *options.positionX,
position_y: *options.positionY,
position_z: *options.positionZ,
orientation_x: *options.orientationX,
orientation_y: *options.orientationY,
orientation_z: *options.orientationZ,
ref_distance: *options.refDistance,
max_distance: *options.maxDistance,
rolloff_factor: *options.rolloffFactor,
cone_inner_angle: *options.coneInnerAngle,
cone_outer_angle: *options.coneOuterAngle,
cone_outer_gain: *options.coneOuterGain,
impl<'a> Convert<PannerNodeOptions> for &'a PannerOptions {
fn convert(self) -> PannerNodeOptions {
PannerNodeOptions {
panning_model: self.panningModel.convert(),
distance_model: self.distanceModel.convert(),
position_x: *self.positionX,
position_y: *self.positionY,
position_z: *self.positionZ,
orientation_x: *self.orientationX,
orientation_y: *self.orientationY,
orientation_z: *self.orientationZ,
ref_distance: *self.refDistance,
max_distance: *self.maxDistance,
rolloff_factor: *self.rolloffFactor,
cone_inner_angle: *self.coneInnerAngle,
cone_outer_angle: *self.coneOuterAngle,
cone_outer_gain: *self.coneOuterGain,
}
}
}
impl From<DistanceModelType> for DistanceModel {
fn from(model: DistanceModelType) -> Self {
match model {
impl Convert<DistanceModel> for DistanceModelType {
fn convert(self) -> DistanceModel {
match self {
DistanceModelType::Linear => DistanceModel::Linear,
DistanceModelType::Inverse => DistanceModel::Inverse,
DistanceModelType::Exponential => DistanceModel::Exponential,
@ -403,9 +404,9 @@ impl From<DistanceModelType> for DistanceModel {
}
}
impl From<PanningModelType> for PanningModel {
fn from(model: PanningModelType) -> Self {
match model {
impl Convert<PanningModel> for PanningModelType {
fn convert(self) -> PanningModel {
match self {
PanningModelType::Equalpower => PanningModel::EqualPower,
PanningModelType::HRTF => PanningModel::HRTF,
}