use std::cell::Cell;
use dom_struct::dom_struct;
use crate::dom::bindings::codegen::Bindings::RTCRtpTransceiverBinding::{
RTCRtpTransceiverDirection, RTCRtpTransceiverMethods,
};
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::globalscope::GlobalScope;
use crate::dom::rtcrtpsender::RTCRtpSender;
use crate::script_runtime::CanGc;
#[dom_struct]
pub struct RTCRtpTransceiver {
reflector_: Reflector,
sender: Dom<RTCRtpSender>,
direction: Cell<RTCRtpTransceiverDirection>,
}
impl RTCRtpTransceiver {
fn new_inherited(global: &GlobalScope, direction: RTCRtpTransceiverDirection) -> Self {
let sender = RTCRtpSender::new(global);
Self {
reflector_: Reflector::new(),
direction: Cell::new(direction),
sender: Dom::from_ref(&*sender),
}
}
pub(crate) fn new(
global: &GlobalScope,
direction: RTCRtpTransceiverDirection,
) -> DomRoot<Self> {
reflect_dom_object(
Box::new(Self::new_inherited(global, direction)),
global,
CanGc::note(),
)
}
}
impl RTCRtpTransceiverMethods<crate::DomTypeHolder> for RTCRtpTransceiver {
fn Direction(&self) -> RTCRtpTransceiverDirection {
self.direction.get()
}
fn SetDirection(&self, direction: RTCRtpTransceiverDirection) {
self.direction.set(direction);
}
fn Sender(&self) -> DomRoot<RTCRtpSender> {
DomRoot::from_ref(&*self.sender)
}
}