diff options
author | Josh Matthews <josh@joshmatthews.net> | 2024-12-11 00:52:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-11 05:52:48 +0000 |
commit | e0cbab2fbb58ac687fb3df1bb56a27e748210bbb (patch) | |
tree | 5c331274b24c62842cd31cfdefe80b29120273dd /components/script/dom/pannernode.rs | |
parent | e10e989abb884f3c83a5c35d4c1b1be887ec0bb1 (diff) | |
download | servo-e0cbab2fbb58ac687fb3df1bb56a27e748210bbb.tar.gz servo-e0cbab2fbb58ac687fb3df1bb56a27e748210bbb.zip |
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>
Diffstat (limited to 'components/script/dom/pannernode.rs')
-rw-r--r-- | components/script/dom/pannernode.rs | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/components/script/dom/pannernode.rs b/components/script/dom/pannernode.rs index c2d558a2e73..2912cb4a474 100644 --- a/components/script/dom/pannernode.rs +++ b/components/script/dom/pannernode.rs @@ -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, } |