use serde::{Serialize, Deserialize};
use serde_json::Value as JsonValue;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct LargestContentfulPaint {
pub renderTime: crate::network::TimeSinceEpoch,
pub loadTime: crate::network::TimeSinceEpoch,
pub size: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub elementId: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nodeId: Option<crate::dom::BackendNodeId>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct LayoutShiftAttribution {
pub previousRect: crate::dom::Rect,
pub currentRect: crate::dom::Rect,
#[serde(skip_serializing_if = "Option::is_none")]
pub nodeId: Option<crate::dom::BackendNodeId>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct LayoutShift {
pub value: f64,
pub hadRecentInput: bool,
pub lastInputTime: crate::network::TimeSinceEpoch,
pub sources: Vec<LayoutShiftAttribution>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct TimelineEvent {
pub frameId: crate::page::FrameId,
#[serde(rename = "type")]
pub type_: String,
pub name: String,
pub time: crate::network::TimeSinceEpoch,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lcpDetails: Option<LargestContentfulPaint>,
#[serde(skip_serializing_if = "Option::is_none")]
pub layoutShiftDetails: Option<LayoutShift>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct EnableParams {
pub eventTypes: Vec<String>,
}
impl EnableParams { pub const METHOD: &'static str = "PerformanceTimeline.enable"; }
impl crate::CdpCommand for EnableParams {
const METHOD: &'static str = "PerformanceTimeline.enable";
type Response = crate::EmptyReturns;
}