/*
* Linkbreakers API
*
* This is a documentation of all the APIs of Linkbreakers
*
* The version of the OpenAPI document: 1.79.3
*
* Generated by: https://openapi-generator.tech
*/
use crate::models;
use serde::{Deserialize, Serialize};
/// Device : Tracks the fingerprint of a visitor's hardware/software so Linkbreakers can de-duplicate scans, enrich analytics, and power security heuristics.
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct Device {
#[serde(rename = "asn", skip_serializing_if = "Option::is_none")]
pub asn: Option<i64>,
#[serde(rename = "browserLanguage", skip_serializing_if = "Option::is_none")]
pub browser_language: Option<String>,
#[serde(rename = "browserName", skip_serializing_if = "Option::is_none")]
pub browser_name: Option<String>,
#[serde(rename = "browserVersion", skip_serializing_if = "Option::is_none")]
pub browser_version: Option<String>,
#[serde(rename = "city", skip_serializing_if = "Option::is_none")]
pub city: Option<String>,
#[serde(rename = "country", skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
/// DeviceActor represents WHO or WHAT is operating the device. This distinguishes between a real human visitor, an automated crawler/scraper bot (e.g. Googlebot, BingBot), and an AI/LLM agent acting on behalf of a user (e.g. GPTBot, ClaudeBot, Gemini, Grok). - DEVICE_ACTOR_UNSPECIFIED: Actor not specified or not yet detected - DEVICE_ACTOR_HUMAN: Human visitor using a browser (covers MOBILE, TABLET, DESKTOP device types) - DEVICE_ACTOR_BOT: Automated crawler or scraper bot (e.g. Googlebot, BingBot, Applebot) - DEVICE_ACTOR_AGENT: AI/LLM agent browsing on behalf of a user (e.g. GPTBot, ClaudeBot, Gemini, Grok) - DEVICE_ACTOR_UNKNOWN: Unable to classify the actor
#[serde(rename = "deviceActor", skip_serializing_if = "Option::is_none")]
pub device_actor: Option<DeviceActor>,
/// Specific actor or crawler name for non-human traffic (e.g. \"Googlebot\", \"GPTBot\", \"ClaudeBot\"). Only populated when device_actor is BOT or AGENT. Null/empty for HUMAN visitors.
#[serde(rename = "deviceActorName", skip_serializing_if = "Option::is_none")]
pub device_actor_name: Option<String>,
/// Company or organization behind the actor (e.g. \"Google\", \"OpenAI\", \"Anthropic\"). Only populated when device_actor is BOT or AGENT. Null/empty for HUMAN visitors.
#[serde(rename = "deviceActorOrigin", skip_serializing_if = "Option::is_none")]
pub device_actor_origin: Option<String>,
#[serde(rename = "deviceBrand", skip_serializing_if = "Option::is_none")]
pub device_brand: Option<String>,
#[serde(rename = "deviceConcurrency", skip_serializing_if = "Option::is_none")]
pub device_concurrency: Option<i32>,
#[serde(rename = "deviceMemory", skip_serializing_if = "Option::is_none")]
pub device_memory: Option<f64>,
#[serde(rename = "deviceName", skip_serializing_if = "Option::is_none")]
pub device_name: Option<String>,
/// DeviceType represents the physical form factor of the device. This describes the hardware category (phone, tablet, laptop, etc.), NOT who or what is operating it — see DeviceActor for that. - DEVICE_TYPE_UNSPECIFIED: Device type not specified or not yet detected - DEVICE_TYPE_NATIVE: Native QR scanner (no browser capabilities reported) - DEVICE_TYPE_MOBILE: Mobile handset browser - DEVICE_TYPE_TABLET: Tablet browser - DEVICE_TYPE_DESKTOP: Desktop or laptop browser - DEVICE_TYPE_UNKNOWN: Unable to classify the device
#[serde(rename = "deviceType", skip_serializing_if = "Option::is_none")]
pub device_type: Option<DeviceType>,
#[serde(rename = "gpu", skip_serializing_if = "Option::is_none")]
pub gpu: Option<String>,
#[serde(rename = "id", skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(rename = "ipAddress", skip_serializing_if = "Option::is_none")]
pub ip_address: Option<String>,
#[serde(rename = "isp", skip_serializing_if = "Option::is_none")]
pub isp: Option<String>,
#[serde(rename = "lastUsedAt", skip_serializing_if = "Option::is_none")]
pub last_used_at: Option<String>,
#[serde(rename = "networkBandwidth", skip_serializing_if = "Option::is_none")]
pub network_bandwidth: Option<f64>,
#[serde(rename = "networkConnection", skip_serializing_if = "Option::is_none")]
pub network_connection: Option<String>,
#[serde(rename = "networkRtt", skip_serializing_if = "Option::is_none")]
pub network_rtt: Option<f64>,
#[serde(rename = "platformName", skip_serializing_if = "Option::is_none")]
pub platform_name: Option<String>,
#[serde(rename = "platformVersion", skip_serializing_if = "Option::is_none")]
pub platform_version: Option<String>,
#[serde(rename = "region", skip_serializing_if = "Option::is_none")]
pub region: Option<String>,
#[serde(rename = "screenHeight", skip_serializing_if = "Option::is_none")]
pub screen_height: Option<f64>,
#[serde(rename = "screenRatio", skip_serializing_if = "Option::is_none")]
pub screen_ratio: Option<f64>,
#[serde(rename = "screenWidth", skip_serializing_if = "Option::is_none")]
pub screen_width: Option<f64>,
#[serde(rename = "state", skip_serializing_if = "Option::is_none")]
pub state: Option<String>,
#[serde(rename = "timezone", skip_serializing_if = "Option::is_none")]
pub timezone: Option<String>,
#[serde(rename = "touchScreen", skip_serializing_if = "Option::is_none")]
pub touch_screen: Option<bool>,
#[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
#[serde(rename = "userAgent", skip_serializing_if = "Option::is_none")]
pub user_agent: Option<String>,
}
impl Device {
/// Tracks the fingerprint of a visitor's hardware/software so Linkbreakers can de-duplicate scans, enrich analytics, and power security heuristics.
pub fn new() -> Device {
Device {
asn: None,
browser_language: None,
browser_name: None,
browser_version: None,
city: None,
country: None,
created_at: None,
device_actor: None,
device_actor_name: None,
device_actor_origin: None,
device_brand: None,
device_concurrency: None,
device_memory: None,
device_name: None,
device_type: None,
gpu: None,
id: None,
ip_address: None,
isp: None,
last_used_at: None,
network_bandwidth: None,
network_connection: None,
network_rtt: None,
platform_name: None,
platform_version: None,
region: None,
screen_height: None,
screen_ratio: None,
screen_width: None,
state: None,
timezone: None,
touch_screen: None,
updated_at: None,
user_agent: None,
}
}
}
/// DeviceActor represents WHO or WHAT is operating the device. This distinguishes between a real human visitor, an automated crawler/scraper bot (e.g. Googlebot, BingBot), and an AI/LLM agent acting on behalf of a user (e.g. GPTBot, ClaudeBot, Gemini, Grok). - DEVICE_ACTOR_UNSPECIFIED: Actor not specified or not yet detected - DEVICE_ACTOR_HUMAN: Human visitor using a browser (covers MOBILE, TABLET, DESKTOP device types) - DEVICE_ACTOR_BOT: Automated crawler or scraper bot (e.g. Googlebot, BingBot, Applebot) - DEVICE_ACTOR_AGENT: AI/LLM agent browsing on behalf of a user (e.g. GPTBot, ClaudeBot, Gemini, Grok) - DEVICE_ACTOR_UNKNOWN: Unable to classify the actor
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum DeviceActor {
#[serde(rename = "DEVICE_ACTOR_UNSPECIFIED")]
DeviceActorUnspecified,
#[serde(rename = "DEVICE_ACTOR_HUMAN")]
DeviceActorHuman,
#[serde(rename = "DEVICE_ACTOR_BOT")]
DeviceActorBot,
#[serde(rename = "DEVICE_ACTOR_AGENT")]
DeviceActorAgent,
#[serde(rename = "DEVICE_ACTOR_UNKNOWN")]
DeviceActorUnknown,
}
impl Default for DeviceActor {
fn default() -> DeviceActor {
Self::DeviceActorUnspecified
}
}
/// DeviceType represents the physical form factor of the device. This describes the hardware category (phone, tablet, laptop, etc.), NOT who or what is operating it — see DeviceActor for that. - DEVICE_TYPE_UNSPECIFIED: Device type not specified or not yet detected - DEVICE_TYPE_NATIVE: Native QR scanner (no browser capabilities reported) - DEVICE_TYPE_MOBILE: Mobile handset browser - DEVICE_TYPE_TABLET: Tablet browser - DEVICE_TYPE_DESKTOP: Desktop or laptop browser - DEVICE_TYPE_UNKNOWN: Unable to classify the device
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum DeviceType {
#[serde(rename = "DEVICE_TYPE_UNSPECIFIED")]
DeviceTypeUnspecified,
#[serde(rename = "DEVICE_TYPE_NATIVE")]
DeviceTypeNative,
#[serde(rename = "DEVICE_TYPE_MOBILE")]
DeviceTypeMobile,
#[serde(rename = "DEVICE_TYPE_TABLET")]
DeviceTypeTablet,
#[serde(rename = "DEVICE_TYPE_DESKTOP")]
DeviceTypeDesktop,
#[serde(rename = "DEVICE_TYPE_UNKNOWN")]
DeviceTypeUnknown,
}
impl Default for DeviceType {
fn default() -> DeviceType {
Self::DeviceTypeUnspecified
}
}