/* *********************************************************************
 * This Original Work is copyright of 51 Degrees Mobile Experts Limited.
 * Copyright 2026 51 Degrees Mobile Experts Limited, Davidson House,
 * Forbury Square, Reading, Berkshire, United Kingdom RG1 3EU.
 *
 * This Original Work is licensed under the European Union Public Licence
 * (EUPL) v.1.2 and is subject to its terms as set out below.
 *
 * If a copy of the EUPL was not distributed with this file, You can obtain
 * one at https://opensource.org/licenses/EUPL-1.2.
 *
 * The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
 * amended by the European Commission) shall be deemed incompatible for
 * the purposes of the Work and the provisions of the compatibility
 * clause in Article 5 of the EUPL shall not apply.
 *
 * If using the Work as, or as part of, a network application, by
 * including the attribution notice(s) required under Article 5 of the EUPL
 * in the end user terms of the application under an appropriate heading,
 * such notice(s) shall fulfill the requirements of that article.
 * ********************************************************************* */

/* *********************************************************************
 * This code is auto generated by 51Degrees using the most up to data
 * at the time of release, and should not be changed directly.
 * **********************************************************************/

//! Generated strongly-typed read accessors for Device Detection.
//!
//! This file is produced by the 51Degrees PropertyGenerator tool from the
//! common metadata. It defines the [`DeviceData`] trait, one accessor per
//! documented property, and implements it for the hand-written
//! [`DeviceDataBase`] by delegating to its by-name dynamic-bag getters.
//! Each property resolves to a single typed value (or a list for the
//! list-valued properties).
#![allow(rustdoc::bare_urls, rustdoc::invalid_html_tags)]

use crate::data::DeviceDataBase;
use fiftyone_pipeline_core::PropertyValueType;
use fiftyone_pipeline_engines::{AspectData, AspectPropertyValue};

/// Strongly-typed read accessors for Device Detection properties.
///
/// Covers the hardware, operating system, browser and crawler properties of
/// a device. Each accessor returns an [`AspectPropertyValue`] wrapping the
/// property's value type, so an absent value carries the no-value reason.
pub trait DeviceData: AspectData {
    /// Indicates what ajax request format should be used.
    fn ajax_request_type(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports 'window.requestAnimationFrame()' method.
    fn animation_timing(&self) -> AspectPropertyValue<bool>;

    /// Indicates the resolution of the device's back camera in megapixels. For a device that has a rotating camera the same value is returned for front and back megapixels properties.
    fn back_camera_mega_pixels(&self) -> AspectPropertyValue<f64>;

    /// Indicates the capacity of the device's standard battery in mAh. This property is not applicable for a device that does not have a battery.
    fn battery_capacity(&self) -> AspectPropertyValue<i64>;

    /// Indicates the number of bits used to describe the colour of each individual pixel, also known as bit depth or colour depth.
    fn bits_per_pixel(&self) -> AspectPropertyValue<i64>;

    /// Indicates if the browser fully supports BlobBuilder, containing a BlobBuilder interface, a FileSaver interface, a FileWriter interface, and a FileWriterSync interface.
    fn blob_builder(&self) -> AspectPropertyValue<bool>;

    /// Refers to the list of audio codecs in specific formats supported for Decode by the Web Browser. This list of codecs is supported for playback on a basic browser installation.
    fn browser_audio_codecs_decode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the list of audio codecs in specific formats supported for Encode by the Web Browser. This list of codecs is supported for capture on a basic browser installation.
    fn browser_audio_codecs_encode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the age in months of the browser since the BrowserDiscontinuedYear and BrowserDiscontinuedMonth.
    fn browser_discontinued_age(&self) -> AspectPropertyValue<i64>;

    /// The month in which further development of the browser version is stopped by the browser vendor. This occurs when a new stable version of the browser is released.
    fn browser_discontinued_month(&self) -> AspectPropertyValue<String>;

    /// The year in which further development of the browser version is stopped by the browser vendor. This occurs when a new stable version of the browser is released.
    fn browser_discontinued_year(&self) -> AspectPropertyValue<i64>;

    /// Indicates the name of the browser without the default OS or layout engine.
    fn browser_family(&self) -> AspectPropertyValue<String>;

    /// A list of logos associated with the Browser. The string contains the caption, followed by the full image URL separated with a tab character.
    fn browser_logos(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the name of the browser. Many mobile browsers, by default, come with an operating system (OS). Unless specifically named, these browsers are named after the accompanying OS and/or the layout engine.
    fn browser_name(&self) -> AspectPropertyValue<String>;

    /// Indicates the age in months of the browser since the BrowserPreviewYear and BrowserPreviewMonth.
    fn browser_preview_age(&self) -> AspectPropertyValue<i64>;

    /// The month in which the browser version is originally released as a Beta/Developer version by the browser vendor. This is before it is officially released as a stable version, to ensure wider testing by the community can take place.
    fn browser_preview_month(&self) -> AspectPropertyValue<String>;

    /// The year in which the browser version is originally released as a Beta/Developer version by the browser vendor. This is before it is officially released as a stable version, to ensure wider testing by the community can take place.
    fn browser_preview_year(&self) -> AspectPropertyValue<i64>;

    /// Indicates the source from which browser properties have been validated. Primary browser data are retrieved from the internal test and populated manually, then they might be validated against an external source such as Caniuse or RingMark.
    fn browser_property_source(&self) -> AspectPropertyValue<String>;

    /// A measure of the popularity of this browser version. All browsers are ordered by the number of events associated with that browser that occurred in the sampling period. The browser with the most events is ranked 1, the second 2 and so on.
    fn browser_rank(&self) -> AspectPropertyValue<i64>;

    /// Indicates the age in months of the browser since the BrowserReleaseYear and BrowserReleaseMonth.
    fn browser_release_age(&self) -> AspectPropertyValue<i64>;

    /// The month in which the browser version is officially released to users by the browser vendor. This version is called the stable version as any bugs or difficulties highlighted in the Beta/Developer Version will have been fixed for this release.
    fn browser_release_month(&self) -> AspectPropertyValue<String>;

    /// The year in which the browser version is officially released to users by the browser vendor. This version is called the stable version as any bugs or difficulties highlighted in the Beta/Developer Version will have been fixed for this release.
    fn browser_release_year(&self) -> AspectPropertyValue<i64>;

    /// Name of the underlying browser source project.
    fn browser_source_project(&self) -> AspectPropertyValue<String>;

    /// Indicates the version or subversion of the underlying browser source project.
    fn browser_source_project_version(&self) -> AspectPropertyValue<String>;

    /// Indicates the name of the company which created the browser.
    fn browser_vendor(&self) -> AspectPropertyValue<String>;

    /// Indicates the version or subversion of the browser.
    fn browser_version(&self) -> AspectPropertyValue<String>;

    /// Refers to the list of video codecs in specific formats supported for Decode by the Web Browser. This list of codecs is supported for playback on a basic browser installation.
    fn browser_video_codecs_decode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the list of video codecs in specific formats supported for Encode by the Web Browser. This list of codecs is supported for capture on a basic browser installation.
    fn browser_video_codecs_encode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the list of camera types the device has. If the device has a rotating camera, this property refers to both front and back facing cameras.
    fn camera_types(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates if the browser supports the canvas element, useful for drawing graphics via scripting (usually JavaScript).
    fn canvas(&self) -> AspectPropertyValue<bool>;

    /// Stands for Composite Capability/Preference Profiles.  Refers to the list of MIME types supported by the operating system. The list does not include MIME types that are only enabled through the use of 3rd party applications.
    fn ccpp_accept(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates which version of the Connected Limited Device Configuration the device supports for use with Java ME.
    fn cldc(&self) -> AspectPropertyValue<f64>;

    /// Indicates the contrast ratio of the device.
    fn contrast_ratio(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports http Cookies. However, the user may have disabled Cookies in their own configuration. Where data cannot be validated, it is assumed that the browser supports cookies.
    fn cookies_capable(&self) -> AspectPropertyValue<bool>;

    /// Indicates the official name of the CPU within the SoC, e.g. ARM Cortex A9 or Krait (Qualcomm).
    fn cpu(&self) -> AspectPropertyValue<String>;

    /// Indicates the number of physical CPU cores the device has.
    fn cpu_cores(&self) -> AspectPropertyValue<i64>;

    /// Indicates the Semiconductor Company that designed the CPU.
    fn cpu_designer(&self) -> AspectPropertyValue<String>;

    /// Indicates the maximum frequency of the CPU of the device in gigahertz (GHz).
    fn cpu_maximum_frequency(&self) -> AspectPropertyValue<f64>;

    /// Indicates the crawler name when applicable. Returns NotCrawler when the device is not a crawler.
    fn crawler_name(&self) -> AspectPropertyValue<String>;

    /// Identification tokens, defined by the IETF, that a crawler includes in the User-Agent request header field to identify the crawler software.
    fn crawler_product_tokens(&self) -> AspectPropertyValue<Vec<String>>;

    /// The url of the web page containing information from the crawler controller about the crawler. Where there is no publicly available information about the crawler, this instead links to their public website.
    fn crawler_url(&self) -> AspectPropertyValue<String>;

    /// Indicates the purpose for which a crawler accesses content, including search, AI indexing, AI model training, and archiving data.
    fn crawler_usage(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates if the browser supports CSS3 background properties (such as background-image, background-color, etc.) that allow styling of the border and the background of an object, and create a shadow effect.
    fn css_background(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports border images, allowing decoration of the border around an object.
    fn css_border_image(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser can draw CSS images into a Canvas.
    fn css_canvas(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports CSS3 Color, allowing author control of the foreground colour and opacity of an element.
    fn css_color(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports CSS3 columns for setting column- width and column-count.
    fn css_column(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports flexbox, allowing the automatic reordering of elements on the page when accessed from devices with different screen sizes.
    fn css_flexbox(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports CSS3 fonts, including non-standard fonts, e.g. @font-face.
    fn css_font(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports all CSS grid properties.
    fn css_grid(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports CSS3 images, allowing for fall-back images, gradients and other effects.
    fn css_images(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports MediaQueries for dynamic CSS that uses the @media rule.
    fn css_media_queries(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports the CSS 'min-width' and 'max-width' element.
    fn css_min_max(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports overflowing of clipped blocks.
    fn css_overflow(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports CSS position, allowing for different box placement algorithms, e.g. static, relative, absolute, fixed and initial.
    fn css_position(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports all CSS3 text features including: text-overflow, word-wrap and word-break.
    fn css_text(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports 2D transformations in CSS3 including rotating, scaling, etc. This property includes support for both transform and transform-origin properties.
    fn css_transforms(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports CSS3 transitions elements, used for animating changes to properties.
    fn css_transitions(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports CSS UI stylings, including text-overflow, css3-boxsizing and pointer properties.
    fn css_ui(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser has the ability to embed custom data attributes on all HTML elements using the 'data-' prefix.
    fn data_set(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser allows encoded data to be contained in a URL.
    fn data_url(&self) -> AspectPropertyValue<bool>;

    /// Indicates which app stores are available on the device and come pre-installed by the manufacturer.
    fn default_app_stores(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates what certifications apply to this device.
    fn device_certifications(&self) -> AspectPropertyValue<Vec<String>>;

    /// Consists of four components separated by a hyphen symbol: Hardware-Platform-Browser-IsCrawler where each Component represents an ID of the corresponding Profile.
    fn device_id(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports DOM events for device orientation, e.g. 'deviceorientation', 'devicemotion' and 'compassneedscalibration'.
    fn device_orientation(&self) -> AspectPropertyValue<bool>;

    /// Indicates the maximum volatile RAM capacity of the device in megabytes (MB). Where a device has different RAM capacity options, the largest option available is returned.
    fn device_ram(&self) -> AspectPropertyValue<i64>;

    /// Indicates the volatile RAM capacity options for the device in megabytes (MB). If no variants are found, then the value returned will be the same as "DeviceRAM".
    fn device_ram_variants(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the type of the device based on values set in other properties, such as IsMobile, IsTablet, IsSmartphone, IsSmallScreen etc.
    fn device_type(&self) -> AspectPropertyValue<String>;

    /// Used when detection method is not Exact or None. This is an integer value and the larger the value the less confident the detector is in this result.
    fn difference(&self) -> AspectPropertyValue<i64>;

    /// Total difference in character positions where the substrings hashes were found away from where they were expected.
    fn drift(&self) -> AspectPropertyValue<i64>;

    /// Indicates the device's Ingress Protection Rating against dust and water (http://en.wikipedia.org/wiki/IP_Code).
    fn durability(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the dynamic contrast ratio of the device's screen.
    fn dynamic_contrast_ratio(&self) -> AspectPropertyValue<String>;

    /// Indicates the annual energy consumption of the device per year in kWh.
    fn energy_consumption_per_year(&self) -> AspectPropertyValue<i64>;

    /// Indicates the maximum amount of memory in gigabytes (GB) the expansion slot of the device can support.
    fn expansion_slot_max_size(&self) -> AspectPropertyValue<i64>;

    /// Indicates the expansion slot type the device can support.
    fn expansion_slot_type(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates if the browser supports the Fetch API.
    fn fetch(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports file reading with events to show progress and errors.
    fn file_reader(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser allows Blobs to be saved to client machines with events to show progress and errors. The End-User may opt to decline these files.
    fn file_saver(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser allows files to be saved to client machines with events to show progress and errors. The End-User may opt to decline these files.
    fn file_writer(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports the 'FormData' object. This property also refers to XMLHttpRequest. If the browser supports 'xhr2', the 'FormData' element will be also supported.
    fn form_data(&self) -> AspectPropertyValue<bool>;

    /// Indicates the list of frequency bands supported by the device.
    fn frequency_bands(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the resolution of the device's front camera in megapixels. For a device that has a rotating camera the same value is returned for front and back megapixels' properties.
    fn front_camera_mega_pixels(&self) -> AspectPropertyValue<f64>;

    /// Indicates if the browser supports requests from a video or canvas element to be displayed in full-screen mode.
    fn fullscreen(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports a feature to acquire the geographical location. For information on which GeoLoc API the browser supports, refer to another property called JavaScriptPreferredGeoLocApi.
    fn geo_location(&self) -> AspectPropertyValue<bool>;

    /// Indicates the official name of the graphical chip within the SoC.
    fn gpu(&self) -> AspectPropertyValue<String>;

    /// Indicates the Semiconductor Company that designed the GPU.
    fn gpu_designer(&self) -> AspectPropertyValue<String>;

    /// Refers to the list of audio codecs supported for decoding by a Chipset. An audio codec is a program used to playback digital audio files. The values of this property are the codec's common name.
    fn hardware_audio_codecs_decode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the list of audio codecs supported for encoding by a Chipset. An audio codec is a program used to capture digital audio files. The values of this property are the codec's common name.
    fn hardware_audio_codecs_encode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the carrier when the device is sold by the HardwareVendor on a single carrier or as indicated via device User-Agent.
    fn hardware_carrier(&self) -> AspectPropertyValue<String>;

    /// Indicates the name of a group of devices that only differ by model or region but are marketed under the same name, e.g. Galaxy Tab S 10.5.
    fn hardware_family(&self) -> AspectPropertyValue<String>;

    /// A list of images associated with the device. The string contains the caption, followed by the full image URL separated with a tab character.
    fn hardware_images(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the model name or number used primarily by the hardware vendor to identify the device, e.g.SM-T805S. When a model identifier is not available the HardwareName will be used.
    fn hardware_model(&self) -> AspectPropertyValue<String>;

    /// Indicates all model numbers used by the hardware vendor to identify the device. This property compliments 'HardwareModel', e.g. Hardware Model Variants A1660 and A1778 correlate to the Hardware Model - iPhone 7.
    fn hardware_model_variants(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the common marketing names associated with the device, e.g. Xperia Z5.
    fn hardware_name(&self) -> AspectPropertyValue<Vec<String>>;

    /// Marketed name of the device or series (e.g., iPhone). If a device does not have an established naming system, this field will be an empty string.
    fn hardware_name_prefix(&self) -> AspectPropertyValue<String>;

    /// Marketed version of the device or series (e.g., 17 Pro Max). If a device does not have an established naming system, this field will be an empty string.
    fn hardware_name_version(&self) -> AspectPropertyValue<String>;

    /// Indicates the source of the profile's specifications. This property will return 'Manufacturer' value if the profile data was obtained from the manufacturer of the device or the device itself. This property will return 'Authoritative' value if the profile data was not obtained from the manufacturer or the device itself but other third party sources (this may include retailers, social media, carriers, etc). This property will return 'Legacy' value if the profile data was obtained prior to 51degrees differentiating between Manufacturer and Authoritative. This property will return 'N/A' value if the profile data was not obtained due to unidentifiable User-Agent. The example profiles are: Generic Android Unknown, Unknown Tablet, etc.
    fn hardware_profile_source(&self) -> AspectPropertyValue<String>;

    /// A measure of the popularity of this device model. All models are ordered by the number of events associated with that model that occurred in the sampling period. The device with the most events is ranked 1, the second 2 and so on.
    fn hardware_rank(&self) -> AspectPropertyValue<i64>;

    /// Indicates the name of the company that manufactures the device or primarily sells it, e.g. Samsung.
    fn hardware_vendor(&self) -> AspectPropertyValue<String>;

    /// Refers to the list of video codecs supported for decoding by a Chipset. A video codec is a program used to playback digital video files. The values of this property are the codec's common name.
    fn hardware_video_codecs_decode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the list of video codecs supported for encoding by a Chipset. A video codec is a program used to capture digital video files. The values of this property are the codec's common name.
    fn hardware_video_codecs_encode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates if the device has a camera capable of taking 3D images.
    fn has3_d_camera(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a screen capable of displaying 3D images.
    fn has3_d_screen(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a camera.
    fn has_camera(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a click wheel such as found on Apple iPod devices.
    fn has_click_wheel(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a physical numeric keypad.
    fn has_keypad(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has embedded NFC (Near Field Communication) wireless technology.
    fn has_nfc(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a physical qwerty keyboard.
    fn has_qwerty_pad(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a removable battery. This property is not applicable for devices that do not have batteries. Unless otherwise stated this property will return a 'False' value for tablets.
    fn has_removable_battery(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a touch screen. This property will return 'False' for a device that does not have an integrated screen.
    fn has_touch_screen(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a trackpad or trackball. Examples of devices that support this property are the Nexus One and Blackberry Curve.
    fn has_track_pad(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device has a virtual qwerty keyboard capability.
    fn has_virtual_qwerty(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser stores the session history for a web page that contains the URLs visited by the browser's user.
    fn history(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser is able to use media inputs, e.g. webcam and microphone, in a script and as an input for forms, e.g. '&lt;input type="file" accept="image/*" id="capture"&gt;' would prompt image- capturing software to open.
    fn html_media_capture(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports the new markup in HTML 5 that also refers to 'New Semantic Elements' such as <header>, <nav>, <section>, <aside>,<footer> etc.
    fn html5(&self) -> AspectPropertyValue<bool>;

    /// Lists what audio formats, if any, the browser supports using the HTML5 <audio> tag.
    fn html5_audio(&self) -> AspectPropertyValue<Vec<String>>;

    /// Lists what video formats, if any, the browser supports using the HTLM5 <video> tag.
    fn html5_video(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the latest version of HyperText Markup Language (HTML) supported by the browser.
    fn html_version(&self) -> AspectPropertyValue<f64>;

    /// Indicates if the browser supports HTTP version 2.
    fn http2(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports HTTP Live Streaming, also known as HLS.
    fn http_live_streaming(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports the 'Iframe' element, used to embed another document within a current HTML document.
    fn iframe(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports an indexed local database.
    fn indexed_db(&self) -> AspectPropertyValue<bool>;

    /// Indicates the internal persistent storage (ROM capacity) options the device can be supplied with in gigabytes (GB), including the device's Operating System and bundled applications. This could also be referred to as "Electrically Erasable Programmable Read-Only Memory (EEPROM)" or "Non Volatile Random Access Memory (NVRAM)". If no variants are found, then the value returned will be the same as "MaxInternalStorage".
    fn internal_storage_variants(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates if a web page is accessed through a VR headset.
    fn in_vr_mode(&self) -> AspectPropertyValue<bool>;

    /// Indicates whether the crawler operates for an AI related purpose, as defined by the values in the CrawlerUsage property. This is based on our judgement of information available from the crawler controller or other trusted research.
    fn is_artificial_intelligence(&self) -> AspectPropertyValue<String>;

    /// Indicates if the device is primarily a game console, such as an Xbox or Playstation.
    fn is_console(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the source of the web traffic identifies itself as operating without human interaction for the purpose of monitoring the availability or performance of a web site, retrieving a response for inclusion in a search engine or is requesting structured data such as via an API. Such sources are often referred to as crawlers, bots, robots, spiders, probes, monitors or HTTP services among other terms. Where the source pretends to be a device operating with human interaction, such as a smartphone or tablet, this property will return, 'False'.
    fn is_crawler(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser may be optimised for low bandwidth. A true value indicates the browser supports a feature that can improve performance on low bandwidth connections, either via the removal of elements, features, a proxy or other methods.
    fn is_data_minimising(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the application is an email browser (Outlook, Gmail, YahooMail, etc.) that is primarily used to access and manage emails (usually from mobile devices).
    fn is_email_browser(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the mobile device accessing a web page emulates a desktop computer. This property is not applicable for desktops, media hubs, TVs and consoles.
    fn is_emulating_desktop(&self) -> AspectPropertyValue<bool>;

    /// Indicates a browser that does not correctly identify the physical hardware device and instead reports an emulated device.
    fn is_emulating_device(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device is primarily advertised as an e-reader. If the device type is EReader then the device is not classified as a tablet.
    fn is_e_reader(&self) -> AspectPropertyValue<bool>;

    /// Indicates a profile which contains more than a single hardware device. When this is true all returned properties represent the default value or lowest given specification of all grouped devices. E.g. the profile representing unknown Windows 10 tablets will return true. Apple devices detected through JavascriptHardwareProfile that do not uniquely identify a device will also return true, and HardwareModelVariants will return a list of model numbers associated with that device group.
    fn is_hardware_group(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device is a media hub or set top box that requires an external display(s).
    fn is_media_hub(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device's primary data connection is wireless and the device is designed to operate mostly by battery power (e.g. mobile phone, smartphone or tablet). This property does not indicate if the device is a mobile phone or not. Laptops are not classified as mobile devices under this definition and so 'IsMobile' will be 'False'.
    fn is_mobile(&self) -> AspectPropertyValue<bool>;

    /// Indicates whether the PlatformVendor is providing a frozen or incorrect platform version in the User-Agent evidence. When True, the PlatformVersion will be the most likely version and may be different to the value provided in the evidence.
    fn is_platform_version_frozen(&self) -> AspectPropertyValue<bool>;

    /// Indicates whether the device screen is foldable or not. If the device does not have a screen or the screen is not foldable, 'False' is returned.
    fn is_screen_foldable(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device is a mobile with a screen size less than 2.5 inches even where the device is marketed as a Smartphone.
    fn is_small_screen(&self) -> AspectPropertyValue<bool>;

    /// Indicates whether the device can make and receive phone calls, has a screen size greater than or equal to 2.5 inches, runs a modern operating system (Android, iOS, Windows Phone, BlackBerry etc.), is not designed to be a wearable technology and is marketed by the vendor as a Smartphone.
    fn is_smart_phone(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device is a web enabled computerised wristwatch with other capabilities beyond timekeeping, such as push notifications. It runs on a Smart Operating System i.e. Android, WatchOS, Tizen, Ubuntu Touch and is designed to be wearable technology.
    fn is_smart_watch(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device is primarily marketed as a tablet or phablet and has a screen size equal to or greater than 7 inches.
    fn is_tablet(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device is a TV running on a smart operating system e.g. Android.
    fn is_tv(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser or app is being used to access a web page through a WebView.
    fn is_web_app(&self) -> AspectPropertyValue<bool>;

    /// The number of iterations carried out in order to find a match. This is the number of nodes in the graph which have been visited.
    fn iterations(&self) -> AspectPropertyValue<i64>;

    /// Indicates if the browser supports JavaScript.
    fn javascript(&self) -> AspectPropertyValue<bool>;

    /// JavaScript that checks for browser specific features and overrides the ProfileID.
    fn java_script_browser_override(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports the JavaScript that can manipulate CSS on the browser's web page.
    fn javascript_can_manipulate_css(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports the JavaScript that can manipulate the Document Object Model on the browser's web page.
    fn javascript_can_manipulate_dom(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports JavaScript that is able to access HTML elements from their ID using the getElementById method.
    fn javascript_get_element_by_id(&self) -> AspectPropertyValue<bool>;

    /// Contains Javascript to get high entropy values.
    fn javascript_get_high_entropy_values(&self) -> AspectPropertyValue<String>;

    /// JavaScript that can override the profile found by the server using information on the client device. This property is applicable for Apple devices which do not provide information about the model in the User-Agent string.
    fn javascript_hardware_profile(&self) -> AspectPropertyValue<String>;

    /// Refers to the JavaScript snippet used to optimise images.
    fn javascript_image_optimiser(&self) -> AspectPropertyValue<String>;

    /// Indicates which GeoLoc API JavaScript the browser supports. If a browser supports a feature to acquire the user's geographical location, another property called 'GeoLocation' will be set to True.
    fn javascript_preferred_geo_loc_api(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser allows registration of event listeners on event targets by using the addEventListener() method.
    fn javascript_supports_event_listener(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports the JavaScript events 'onload', 'onclick' and 'onselect'.
    fn javascript_supports_events(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports the JavaScript that is able to insert HTML into a DIV tag.
    fn javascript_supports_inner_html(&self) -> AspectPropertyValue<bool>;

    /// Indicates which JavaScript version the browser uses. The number refers to JavaScript versioning, not ECMAscript or Jscript. If the browser doesn't support JavaScript then 'NotSupported' value is returned.
    fn javascript_version(&self) -> AspectPropertyValue<String>;

    /// Indicates the browser supports JPEG 2000 image format.
    fn jpeg2000(&self) -> AspectPropertyValue<bool>;

    /// Refers to the grade of the level the device has with the jQuery Mobile Framework, as posted by jQuery.
    fn j_query_mobile_support(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports the 'JSON' object. This property may need a vendor prefix, e.g. webkit, moz, etc.
    fn json(&self) -> AspectPropertyValue<bool>;

    /// Refers to the name of the embedded technology the browser uses to display formatted content on the screen.
    fn layout_engine(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports the CSS-mask element that allows users to alter the visibility of an item by either partially or fully hiding the item.
    fn masking(&self) -> AspectPropertyValue<bool>;

    /// Indicates the number of hash nodes matched within the evidence.
    fn matched_nodes(&self) -> AspectPropertyValue<i64>;

    /// Indicates the maximum amount of internal persistent storage (ROM capacity) with which the device is supplied in gigabytes (GB), including the space used by the device's Operating System and bundled applications. This could also be referred to as "Electrically Erasable Programmable Read-Only Memory (EEPROM)" or "Non Volatile Random Access Memory (NVRAM)". Where a device has different internal storage options, the largest option available is returned.
    fn max_internal_storage(&self) -> AspectPropertyValue<f64>;

    /// Indicates the maximum number of "Universal Integrated Circuit Cards (UICC - more commonly known as, SIM)" the device can support including both removable and embedded. If the device doesn't support any UICC then a value of '0' is returned.
    fn max_number_of_sim_cards(&self) -> AspectPropertyValue<i64>;

    /// Indicates the maximum standby time of the device in hours. This property is not applicable for a device without a battery.
    fn max_standby_time(&self) -> AspectPropertyValue<i64>;

    /// Indicates the maximum talk time of the device in minutes. This property is not applicable for a device that does not have a battery or support phone calls.
    fn max_talk_time(&self) -> AspectPropertyValue<i64>;

    /// Indicates the maximum general usage time of the device in minutes. This property is not applicable for a device without a battery.
    fn max_usage_time(&self) -> AspectPropertyValue<i64>;

    /// Indicates if the browser supports a meter element that represents a scalar measurement within a known range or fractional value. This property does not indicate whether the browser supports the progress bar indication. For this purpose, the progress property should be used.
    fn meter(&self) -> AspectPropertyValue<bool>;

    /// The method used to determine the match result.
    fn method(&self) -> AspectPropertyValue<String>;

    /// Indicates which version of Mobile Information Device Profile the device supports, used with Java ME and CLDC.
    fn midp(&self) -> AspectPropertyValue<f64>;

    /// Refers to the 'Retail Branding' value returned for Android Google Play native applications, when the android.os.Build.BRAND javascript is used to display the class. This property is not applicable for hardware running on operating systems other than Android.
    fn native_brand(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the 'Device' value returned for Android Google Play native applications, when the android.os.Build.DEVICE javascript is used to display the class. This property is not applicable for hardware running on operating systems other than Android.
    fn native_device(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the 'Model' value returned for Android Google Play or Amazon native applications when the android.os.Build.MODEL javascript is used to display the class. For Apple devices, this property refers to the device identifier, for example 'iPad5,4'. This may be obtained by calling sysctlbyname and passing hw.machine as a name parameter or alternatively by obtaining "machine" member from a populated utsname structure using uname API.
    fn native_model(&self) -> AspectPropertyValue<Vec<String>>;

    /// NativeName Refers to the 'Marketing Name' value that a device is registered with on the Google Play service. This property is not applicable for hardware running on operating systems other than Android.
    fn native_name(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the name of the mobile operating system (iOS, Android) for which an application program has been developed to be used by a device.
    fn native_platform(&self) -> AspectPropertyValue<String>;

    /// Indicates the number of screens the device has. This property is not applicable for a device that does not have a screen. A display is only considered a screen if it could be used to display a web page.
    fn number_of_screens(&self) -> AspectPropertyValue<i64>;

    /// Indicates the name of the company that manufactures the device.
    fn oem(&self) -> AspectPropertyValue<String>;

    /// Indicates the power consumption of the device while switched on.
    fn on_power_consumption(&self) -> AspectPropertyValue<i64>;

    /// The ratio of the resolution in physical pixels to the resolution in CSS pixels. This is approximated by screen resolution and screen size when the value is not known.
    fn pixel_ratio(&self) -> AspectPropertyValue<f64>;

    /// JavaScript that can override the property value found by the server using information on the client device. This property is applicable for browsers that support pixel ratio cookie.
    fn pixel_ratio_javascript(&self) -> AspectPropertyValue<String>;

    /// Indicates the age in months of the operating system since the PlatformReleaseYear and PlatformReleaseMonth.
    fn platform_discontinued_age(&self) -> AspectPropertyValue<i64>;

    /// The month in which further development for the platform version is stopped by the platform vendor. This occurs when a new stable version of the platform is released.
    fn platform_discontinued_month(&self) -> AspectPropertyValue<String>;

    /// The year in which further development for the platform version is stopped by the platform vendor. This occurs when a new stable version of the platform is released.
    fn platform_discontinued_year(&self) -> AspectPropertyValue<i64>;

    /// A list of logos associated with the Software. The string contains the caption, followed by the full image URL separated with a tab character.
    fn platform_logos(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the name of the operating system the device is using.
    fn platform_name(&self) -> AspectPropertyValue<String>;

    /// Indicates the age in months of the operating system since the PlatformPreviewYear and PlatformPreviewMonth.
    fn platform_preview_age(&self) -> AspectPropertyValue<i64>;

    /// The month in which the platform version was originally released as a Beta/Developer version by the platform vendor. This is before it is officially released as a stable version, to ensure wider testing by the community can take place.
    fn platform_preview_month(&self) -> AspectPropertyValue<String>;

    /// The year in which the platform version was originally released as a Beta/Developer version by the platform vendor. This is before it is officially released as a stable version, to ensure wider testing by the community can take place.
    fn platform_preview_year(&self) -> AspectPropertyValue<i64>;

    /// A measure of the popularity of this software platform (i.e. OS and version). All platforms are ordered by the number of events associated with that platform that occurred in the sampling period. The platform with the most events is ranked 1, the second 2 and so on.
    fn platform_rank(&self) -> AspectPropertyValue<i64>;

    /// Indicates the age in months of the operating system since the PlatformReleaseYear and PlatformReleaseMonth.
    fn platform_release_age(&self) -> AspectPropertyValue<i64>;

    /// The month in which the platform version was officially released to users by the platform vendor. This version is called the stable version as any bugs or difficulties highlighted in the Beta/Developer version will have been fixed for this release.
    fn platform_release_month(&self) -> AspectPropertyValue<String>;

    /// The year in which the platform version was officially released to users by the platform vendor. This version is called the stable version as any bugs or difficulties highlighted in the Beta/Developer Version will have been fixed for this release.
    fn platform_release_year(&self) -> AspectPropertyValue<i64>;

    /// Indicates the name of the company that developed the operating system.
    fn platform_vendor(&self) -> AspectPropertyValue<String>;

    /// Indicates the version or subversion of the software platform. Where the PlatformVendor is Apple, the PlatformVersion returned will be the most likely version. It may be different to the value provided in the evidence.
    fn platform_version(&self) -> AspectPropertyValue<String>;

    /// Refers to the number of unique client IPs from which this device has been seen.
    fn popularity(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports messages between different documents.
    fn post_message(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser can prefetch resources without executing them.
    fn preload(&self) -> AspectPropertyValue<bool>;

    /// Indicates a price range describing the recommended retail price of the device at the date of release, inclusive of tax (where applicable).  Prices are in United States Dollars (USD); if the price is not originally in USD it will be converted to USD using the relevant exchange rate at the time of launch. Prices are for the SIM-free version of the device (if applicable). In cases where there are several versions of the same model of the device, the price will reflect the device that was used to populate the specifications.
    fn price_band(&self) -> AspectPropertyValue<String>;

    /// The `Profiles` property.
    fn profiles(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports progress reports, such as with HTTP requests. The progress element can be used to display the progress of the task. This property doesn't represent a scalar measurement. If the browser supports a gauge, the meter property should be used.
    fn progress(&self) -> AspectPropertyValue<bool>;

    /// Indicates the level of support for the Promise object. The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.
    fn promise(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports simple dialogues (window.alert, window.confirm and window.prompt).
    fn prompts(&self) -> AspectPropertyValue<bool>;

    /// Indicates the maximum number of frames per second of the output image of the device in Hertz.
    fn refresh_rate(&self) -> AspectPropertyValue<i64>;

    /// Indicates the age in months of the device since the ReleaseYear and ReleaseMonth.
    fn release_age(&self) -> AspectPropertyValue<i64>;

    /// Indicates the month in which the device was released or the month in which the device was first seen by 51Degrees (if the release date cannot be identified).
    fn release_month(&self) -> AspectPropertyValue<String>;

    /// Indicates the year in which the device was released or the year in which the device was first seen by 51Degrees (if the release date cannot be identified).
    fn release_year(&self) -> AspectPropertyValue<i64>;

    /// Indicates  the device's supported satellite navigation types.
    fn satellite_navigation_types(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the diagonal size of the device's screen in inches, to a maximum of two decimal points. Where screens have curved corners, the actual viewable area may be less.
    fn screen_inches_diagonal(&self) -> AspectPropertyValue<f64>;

    /// Indicates the diagonal size of the device's screen in inches rounded to the nearest whole number. This property will return the value 'Unknown' for desktop or for devices which do not have an integrated screen.
    fn screen_inches_diagonal_rounded(&self) -> AspectPropertyValue<i64>;

    /// Refers to the height of the device's screen in inches. This property will return 'Unknown' for desktops or for devices which do not have an integrated screen.
    fn screen_inches_height(&self) -> AspectPropertyValue<f64>;

    /// Indicates the area of the device's screen in square inches rounded to the nearest whole number. This property will return the value 'Unknown' for desktop or for devices which do not have an integrated screen.
    fn screen_inches_square(&self) -> AspectPropertyValue<i64>;

    /// Refers to the width of the device's screen in inches. This property will return the value 'Unknown' for desktop or for devices which do not have an integrated screen.
    fn screen_inches_width(&self) -> AspectPropertyValue<f64>;

    /// Refers to the diagonal size of the screen of the device in millimetres. This property will return 'Unknown' for desktops or for devices which do not have an integrated screen.
    fn screen_mm_diagonal(&self) -> AspectPropertyValue<f64>;

    /// Indicate the diagonal size of the device's screen in millimetres rounded to the nearest whole number. This property will return the value 'Unknown' for desktop or for devices which do not have an integrated screen.
    fn screen_mm_diagonal_rounded(&self) -> AspectPropertyValue<i64>;

    /// Refers to the screen height of the device in millimetres. This property will return 'Unknown' for desktops or for devices which do not have an integrated screen. For devices such as tablets or TV which are predominantly used in landscape mode, the screen height will be the smaller value compared to the screen width.
    fn screen_mm_height(&self) -> AspectPropertyValue<f64>;

    /// Indicates the area of the device's screen in square millimetres rounded to the nearest whole number. This property will return the value  'Unknown' for desktop or for devices which do not have an integrated screen.
    fn screen_mm_square(&self) -> AspectPropertyValue<i64>;

    /// Refers to the screen width of the device in millimetres. This property will return 'Unknown' for desktops or for devices which do not have an integrated screen. For devices such as tablets or TV which are predominantly used in landscape mode, the screen height will be the smaller value compared to the screen width.
    fn screen_mm_width(&self) -> AspectPropertyValue<f64>;

    /// Indicates the height of the device's screen in pixels.This property is not applicable for a device that does not have a screen. For devices such as tablets or TV which are predominantly used in landscape mode, the pixel height will be the smaller value compared to the pixel width.
    fn screen_pixels_height(&self) -> AspectPropertyValue<i64>;

    /// JavaScript that can override the property value found by the server using information on the client device. This property is applicable for browsers that support screen pixels height cookie.
    fn screen_pixels_height_java_script(&self) -> AspectPropertyValue<String>;

    /// Indicates the height of the device's screen in physical pixels. This property is not applicable for a device that does not have a screen. For devices such as tablets or TV which are predominantly used in landscape mode, the pixel height will be the smaller value compared to the pixel width.
    fn screen_pixels_physical_height(&self) -> AspectPropertyValue<i64>;

    /// Indicates the width of the device's screen in physical pixels. This property is not applicable for a device that does not have a screen. For devices such as tablets or TV which are predominantly used in landscape mode, the pixel width will be the larger value compared to the pixel height.
    fn screen_pixels_physical_width(&self) -> AspectPropertyValue<i64>;

    /// Indicates the width of the device's screen in pixels. This property is not applicable for a device that does not have a screen. For devices such as tablets or TV which are predominantly used in landscape mode, the pixel width will be the larger value compared to the pixel height.
    fn screen_pixels_width(&self) -> AspectPropertyValue<i64>;

    /// JavaScript that can override the property value found by the server using information on the client device. This property is applicable for browsers that support screen pixels width cookie.
    fn screen_pixels_width_java_script(&self) -> AspectPropertyValue<String>;

    /// Indicates the screen type of the device. This property is not applicable for a device that does not have an integrated screen, e.g. a media hub. If the device manufacturer or vendor does not specify what the screen type of the device is then it is assumed the device has an LCD screen.
    fn screen_type(&self) -> AspectPropertyValue<String>;

    /// Indicates the resolution of the device's second back camera in megapixels.
    fn second_back_camera_mega_pixels(&self) -> AspectPropertyValue<f64>;

    /// Indicates the resolution of the device's second front camera in megapixels.
    fn second_front_camera_mega_pixels(&self) -> AspectPropertyValue<f64>;

    /// Indicates the diagonal size of the device's second screen in inches. This property is not applicable for a device that does not have a second screen.
    fn second_screen_inches_diagonal(&self) -> AspectPropertyValue<f64>;

    /// Indicates the diagonal size of the device's second screen in inches rounded to the nearest whole number. This property will return the value 'N/A' for desktop or for devices which do not have a second screen.
    fn second_screen_inches_diagonal_rounded(&self) -> AspectPropertyValue<i64>;

    /// Refers to the height of the device's second screen in inches. This property will return 'N/A' for desktops or for devices which do not have a second screen.
    fn second_screen_inches_height(&self) -> AspectPropertyValue<f64>;

    /// Indicates the area of the device's second screen in square inches rounded to the nearest whole number. This property will return the value 'N/A' for desktop or for devices which do not have a second screen.
    fn second_screen_inches_square(&self) -> AspectPropertyValue<i64>;

    /// Refers to the width of the device's second screen in inches. This property will return the value 'N/A' for desktop or for devices which do not have a second screen.
    fn second_screen_inches_width(&self) -> AspectPropertyValue<f64>;

    /// Refers to the diagonal size of the second screen of the device in millimetres. This property will return 'N/A' for desktops or for devices which do not have a second screen.
    fn second_screen_mm_diagonal(&self) -> AspectPropertyValue<f64>;

    /// Indicate the diagonal size of the device's second screen in millimetres rounded to the nearest whole number. This property will return the value 'N/A' for desktop or for devices which do not have a second screen.
    fn second_screen_mm_diagonal_rounded(&self) -> AspectPropertyValue<i64>;

    /// Refers to the second screen height of the device in millimetres. This property will return 'N/A' for desktops or for devices which do not have a second screen.
    fn second_screen_mm_height(&self) -> AspectPropertyValue<f64>;

    /// Indicates the area of the device's second screen in square millimetres rounded to the nearest whole number. This property will return the value  'N/A' for desktop or for devices which do not have a second screen.
    fn second_screen_mm_square(&self) -> AspectPropertyValue<i64>;

    /// Refers to the second screen width of the device in millimetres. This property will return 'N/A' for desktops or for devices which do not have a second screen.
    fn second_screen_mm_width(&self) -> AspectPropertyValue<f64>;

    /// Indicates the height of the device's second screen in pixels. This property is not applicable for a device that does not have a second screen.
    fn second_screen_pixels_height(&self) -> AspectPropertyValue<i64>;

    /// Indicates the width of the device's second screen in pixels. This property is not applicable for a device that does not have a second screen.
    fn second_screen_pixels_width(&self) -> AspectPropertyValue<i64>;

    /// Indicates if the browser supports the querySelector() method that returns the first element matching a specified CSS selector(s) in the document.
    fn selector(&self) -> AspectPropertyValue<bool>;

    /// Contains the Accept-CH HTTP header values to add to the HTTP response for the browser component. UACH values Sec-CH-UA, and Sec-CH-UA-Full-Version are relevant. The default value is Unknown if the browser does not fully support UACH.
    fn set_header_browser_accept_ch(&self) -> AspectPropertyValue<String>;

    /// Contains the Accept-CH HTTP header values to add to the HTTP response for the hardware component. UACH values Sec-CH-UA-Model, and Sec-CH-UA-Mobile are relevant. The default value is Unknown if the browser does not fully support UACH.
    fn set_header_hardware_accept_ch(&self) -> AspectPropertyValue<String>;

    /// Contains the Accept-CH HTTP header values to add to the HTTP response for the platform component. UACH values Sec-CH-UA-Platform, and Sec-CH-UA-Platform-Version are relevant. The default value is Unknown if the browser does not fully support UACH.
    fn set_header_platform_accept_ch(&self) -> AspectPropertyValue<String>;

    /// Indicates the primary marketing name of the System on Chip (chipset) which includes the CPU, GPU and modem. e.g. Snapdragon S4
    fn so_c(&self) -> AspectPropertyValue<String>;

    /// Indicates the Semiconductor Company that designed the System on Chip (chipset) e.g. Qualcomm, Intel or Mediatek.
    fn so_c_designer(&self) -> AspectPropertyValue<String>;

    /// Indicates the official model of the System on Chip (chipset) e.g. MSM8625, MT8312.
    fn so_c_model(&self) -> AspectPropertyValue<String>;

    /// Refers to the list of audio codecs supported by an operating system. This list of codecs is supported for playback on a  basic software installation. The values of this property are the codec's common name.
    fn software_audio_codecs_decode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the list of audio codecs supported by an operating system. This list of codecs is supported for capture on a basic software installation. The values of this property are the codec's common name.
    fn software_audio_codecs_encode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the list of video codecs supported by an operating system. This list of codecs is supported for playback on a  basic software installation. The values of this property are the codec's common name.
    fn software_video_codecs_decode(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the list of video codecs supported by an operating system. This list of codecs is supported for capture on a basic software installation. The values of this property are the codec's common name.
    fn software_video_codecs_encode(&self) -> AspectPropertyValue<Vec<String>>;

    /// The Specific Absorbtion Rate (SAR) is a measure of the rate at which energy is absorbed by the human body when exposed by a radio frequency electromagnetic field. This property contains values in Watts per Kilogram (W/kg) in accordance with the European Committee for Electrotechnical Standardization (CENELEC).
    fn specific_absorbtion_rate_eu(&self) -> AspectPropertyValue<f64>;

    /// The Specific Absorbtion Rate (SAR) is a measure of the rate at which energy is absorbed by the human body when exposed by a radio frequency electromagnetic field. This property contains values in Watts per Kilogram (W/kg) in accordance with the Federal Communications Commission (FCC).
    fn specific_absorbtion_rate_us(&self) -> AspectPropertyValue<f64>;

    /// A list of MIME types the device can stream. The list does not include MIME types that are only supported through the use of 3rd party applications.
    fn streaming_accept(&self) -> AspectPropertyValue<Vec<String>>;

    /// Refers to the suggested optimum height of a button in millimetres. Ensures the button is touchable on a touch screen and not too large on a non-touch screen. Assumes the actual device DPI (Dots Per Inch) is being used.
    fn suggested_image_button_height_mms(&self) -> AspectPropertyValue<f64>;

    /// Refers to the suggested optimum height of a button in millimetres. Ensures the button is touchable on a touch screen and not too large on a non-touch screen.
    fn suggested_image_button_height_pixels(&self) -> AspectPropertyValue<f64>;

    /// Refers to the suggested optimum height of a hyperlink in pixels. Ensures the link is touchable on a touch screen and not too large on a non-touch screen. Assumes the actual device DPI is being used.
    fn suggested_link_size_pixels(&self) -> AspectPropertyValue<f64>;

    /// Refers to the suggested optimum height of a hyperlink in points. Ensures the link is touchable on a touch screen and not too large on a non-touch screen.
    fn suggested_link_size_points(&self) -> AspectPropertyValue<f64>;

    /// Indicates the list of wireless data technologies supported by the device, including Bluetooth and Wi-Fi. For example, 4G cellular network technologies includes 'LTE' (Long Term Evolution), and 5G technologies includes 'NR' (New Radio). If the device supports phone calls, the SMS value is also returned.
    fn supported_bearers(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the highest version of Bluetooth the device supports.
    fn supported_bluetooth(&self) -> AspectPropertyValue<f64>;

    /// Indicates the Bluetooth profiles the device supports.
    fn supported_bluetooth_profiles(&self) -> AspectPropertyValue<Vec<String>>;

    /// This Property is no longer being supported. Please see Properties, SupportedBluetooth and SupportedBluetoothProfiles for the relevant data.
    fn supported_bluetooth_version(&self) -> AspectPropertyValue<String>;

    /// Indicates the list of features the device's camera supports.
    fn supported_camera_features(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the list of charger types supported by the device. For devices that operate via mains power only, e.g. TVs, MediaHubs (which technically aren't being charged) this property is not applicable.
    fn supported_charger_types(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the list of input and output communications the device can support, for example 3.5mm jack, micro-USB etc.
    fn supported_io(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates the list of sensors supported by the device. This property may be not applicable for devices without sensors, such as most feature phones and media hubs.
    fn supported_sensor_types(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates whether the "Universal Integrated Circuit Card (UICC - more commonly known as, SIM)" is removable or embedded. If removable, the form factor of the UICC is returned.
    fn supported_sim_card_types(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates if the device supports 24p; a video format that operates at 24 frames per second.
    fn supports24p(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device can receive and make telephone calls using available bearers without any additional software such as VoIP. Devices that support voice calls do not necessarily support phone calls.
    fn supports_phone_calls(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports TLS or SSL, essential for secure protocols such as HTTPS.
    fn supports_tls_ssl(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports WebGL technology to generate hardware-accelerated 3D graphics.
    fn supports_web_gl(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the device supports Wireless Display Technology.
    fn supports_wi_di(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports SVG (scalable vector graphics), useful for 2D animations and applications where all objects within the SVG can be accessed via the DOM and can have assigned event listener elements.
    fn svg(&self) -> AspectPropertyValue<bool>;

    /// Indicates the Type Allocation Code (TAC) for devices supporting GSM/3GPP networks which come from multiple sources. This property will return 'N/A' if we cannot determine the device TAC authenticy.
    fn tac(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates whether third party cookies are enabled. Where the JavaScript contained in ThirdPartyCookiesEnabledJavaScript has not run this will indicate the likely status.
    fn third_party_cookies_enabled(&self) -> AspectPropertyValue<String>;

    /// Contains JavaScript that can override the property ThirdPartyCookiesEnabled. This property returns NotSupported for browsers which cannot support third party cookies.
    fn third_party_cookies_enabled_java_script(&self) -> AspectPropertyValue<String>;

    /// Indicates if the browser supports the method of registering and interpreting finder (or stylus) activity on touch screens or trackpads.
    fn touch_events(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports a method of tracking text being played with media, e.g. subtitles and captions.
    fn track(&self) -> AspectPropertyValue<bool>;

    /// The matched User-Agents.
    fn user_agents(&self) -> AspectPropertyValue<Vec<String>>;

    /// Indicates if the browser supports the 'Video' element for playing videos on web pages without requiring a plug-in.
    fn video(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports Viewport, to give control over view for different screen sizes and resolutions of devices accessing a website.
    fn viewport(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports the WebP image format.
    fn web_p(&self) -> AspectPropertyValue<bool>;

    /// Indicates if the browser supports background workers in JavaScript.
    fn web_workers(&self) -> AspectPropertyValue<bool>;

    /// Indicates the weight of the device with battery in grams.
    fn weight_with_battery(&self) -> AspectPropertyValue<f64>;

    /// Indicates the weight of the device without battery in grams.
    fn weight_without_battery(&self) -> AspectPropertyValue<f64>;

    /// Indicates if the browser supports client-to-server communication with XmlHttpRequests. If the browser supports 'Xhr2' will also support 'DataForm' element. This property may need a vendor prefix, e.g. webkit, moz, etc.
    fn xhr2(&self) -> AspectPropertyValue<bool>;
}

impl DeviceData for DeviceDataBase {
    fn ajax_request_type(&self) -> AspectPropertyValue<String> {
        self.string_property("AjaxRequestType")
    }

    fn animation_timing(&self) -> AspectPropertyValue<bool> {
        self.bool_property("AnimationTiming")
    }

    fn back_camera_mega_pixels(&self) -> AspectPropertyValue<f64> {
        self.double_property("BackCameraMegaPixels")
    }

    fn battery_capacity(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BatteryCapacity")
    }

    fn bits_per_pixel(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BitsPerPixel")
    }

    fn blob_builder(&self) -> AspectPropertyValue<bool> {
        self.bool_property("BlobBuilder")
    }

    fn browser_audio_codecs_decode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("BrowserAudioCodecsDecode")
    }

    fn browser_audio_codecs_encode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("BrowserAudioCodecsEncode")
    }

    fn browser_discontinued_age(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BrowserDiscontinuedAge")
    }

    fn browser_discontinued_month(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserDiscontinuedMonth")
    }

    fn browser_discontinued_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BrowserDiscontinuedYear")
    }

    fn browser_family(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserFamily")
    }

    fn browser_logos(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("BrowserLogos")
    }

    fn browser_name(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserName")
    }

    fn browser_preview_age(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BrowserPreviewAge")
    }

    fn browser_preview_month(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserPreviewMonth")
    }

    fn browser_preview_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BrowserPreviewYear")
    }

    fn browser_property_source(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserPropertySource")
    }

    fn browser_rank(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BrowserRank")
    }

    fn browser_release_age(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BrowserReleaseAge")
    }

    fn browser_release_month(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserReleaseMonth")
    }

    fn browser_release_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("BrowserReleaseYear")
    }

    fn browser_source_project(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserSourceProject")
    }

    fn browser_source_project_version(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserSourceProjectVersion")
    }

    fn browser_vendor(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserVendor")
    }

    fn browser_version(&self) -> AspectPropertyValue<String> {
        self.string_property("BrowserVersion")
    }

    fn browser_video_codecs_decode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("BrowserVideoCodecsDecode")
    }

    fn browser_video_codecs_encode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("BrowserVideoCodecsEncode")
    }

    fn camera_types(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("CameraTypes")
    }

    fn canvas(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Canvas")
    }

    fn ccpp_accept(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("CcppAccept")
    }

    fn cldc(&self) -> AspectPropertyValue<f64> {
        self.double_property("CLDC")
    }

    fn contrast_ratio(&self) -> AspectPropertyValue<String> {
        self.string_property("ContrastRatio")
    }

    fn cookies_capable(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CookiesCapable")
    }

    fn cpu(&self) -> AspectPropertyValue<String> {
        self.string_property("CPU")
    }

    fn cpu_cores(&self) -> AspectPropertyValue<i64> {
        self.integer_property("CPUCores")
    }

    fn cpu_designer(&self) -> AspectPropertyValue<String> {
        self.string_property("CPUDesigner")
    }

    fn cpu_maximum_frequency(&self) -> AspectPropertyValue<f64> {
        self.double_property("CPUMaximumFrequency")
    }

    fn crawler_name(&self) -> AspectPropertyValue<String> {
        self.string_property("CrawlerName")
    }

    fn crawler_product_tokens(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("CrawlerProductTokens")
    }

    fn crawler_url(&self) -> AspectPropertyValue<String> {
        self.string_property("CrawlerUrl")
    }

    fn crawler_usage(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("CrawlerUsage")
    }

    fn css_background(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssBackground")
    }

    fn css_border_image(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssBorderImage")
    }

    fn css_canvas(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssCanvas")
    }

    fn css_color(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssColor")
    }

    fn css_column(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssColumn")
    }

    fn css_flexbox(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssFlexbox")
    }

    fn css_font(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssFont")
    }

    fn css_grid(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssGrid")
    }

    fn css_images(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssImages")
    }

    fn css_media_queries(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssMediaQueries")
    }

    fn css_min_max(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssMinMax")
    }

    fn css_overflow(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssOverflow")
    }

    fn css_position(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssPosition")
    }

    fn css_text(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssText")
    }

    fn css_transforms(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssTransforms")
    }

    fn css_transitions(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssTransitions")
    }

    fn css_ui(&self) -> AspectPropertyValue<bool> {
        self.bool_property("CssUI")
    }

    fn data_set(&self) -> AspectPropertyValue<bool> {
        self.bool_property("DataSet")
    }

    fn data_url(&self) -> AspectPropertyValue<bool> {
        self.bool_property("DataUrl")
    }

    fn default_app_stores(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("DefaultAppStores")
    }

    fn device_certifications(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("DeviceCertifications")
    }

    fn device_id(&self) -> AspectPropertyValue<String> {
        self.string_property("DeviceId")
    }

    fn device_orientation(&self) -> AspectPropertyValue<bool> {
        self.bool_property("DeviceOrientation")
    }

    fn device_ram(&self) -> AspectPropertyValue<i64> {
        self.integer_property("DeviceRAM")
    }

    fn device_ram_variants(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("DeviceRAMVariants")
    }

    fn device_type(&self) -> AspectPropertyValue<String> {
        self.string_property("DeviceType")
    }

    fn difference(&self) -> AspectPropertyValue<i64> {
        self.integer_property("Difference")
    }

    fn drift(&self) -> AspectPropertyValue<i64> {
        self.integer_property("Drift")
    }

    fn durability(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("Durability")
    }

    fn dynamic_contrast_ratio(&self) -> AspectPropertyValue<String> {
        self.string_property("DynamicContrastRatio")
    }

    fn energy_consumption_per_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("EnergyConsumptionPerYear")
    }

    fn expansion_slot_max_size(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ExpansionSlotMaxSize")
    }

    fn expansion_slot_type(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("ExpansionSlotType")
    }

    fn fetch(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Fetch")
    }

    fn file_reader(&self) -> AspectPropertyValue<bool> {
        self.bool_property("FileReader")
    }

    fn file_saver(&self) -> AspectPropertyValue<bool> {
        self.bool_property("FileSaver")
    }

    fn file_writer(&self) -> AspectPropertyValue<bool> {
        self.bool_property("FileWriter")
    }

    fn form_data(&self) -> AspectPropertyValue<bool> {
        self.bool_property("FormData")
    }

    fn frequency_bands(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("FrequencyBands")
    }

    fn front_camera_mega_pixels(&self) -> AspectPropertyValue<f64> {
        self.double_property("FrontCameraMegaPixels")
    }

    fn fullscreen(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Fullscreen")
    }

    fn geo_location(&self) -> AspectPropertyValue<bool> {
        self.bool_property("GeoLocation")
    }

    fn gpu(&self) -> AspectPropertyValue<String> {
        self.string_property("GPU")
    }

    fn gpu_designer(&self) -> AspectPropertyValue<String> {
        self.string_property("GPUDesigner")
    }

    fn hardware_audio_codecs_decode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("HardwareAudioCodecsDecode")
    }

    fn hardware_audio_codecs_encode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("HardwareAudioCodecsEncode")
    }

    fn hardware_carrier(&self) -> AspectPropertyValue<String> {
        self.string_property("HardwareCarrier")
    }

    fn hardware_family(&self) -> AspectPropertyValue<String> {
        self.string_property("HardwareFamily")
    }

    fn hardware_images(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("HardwareImages")
    }

    fn hardware_model(&self) -> AspectPropertyValue<String> {
        self.string_property("HardwareModel")
    }

    fn hardware_model_variants(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("HardwareModelVariants")
    }

    fn hardware_name(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("HardwareName")
    }

    fn hardware_name_prefix(&self) -> AspectPropertyValue<String> {
        self.string_property("HardwareNamePrefix")
    }

    fn hardware_name_version(&self) -> AspectPropertyValue<String> {
        self.string_property("HardwareNameVersion")
    }

    fn hardware_profile_source(&self) -> AspectPropertyValue<String> {
        self.string_property("HardwareProfileSource")
    }

    fn hardware_rank(&self) -> AspectPropertyValue<i64> {
        self.integer_property("HardwareRank")
    }

    fn hardware_vendor(&self) -> AspectPropertyValue<String> {
        self.string_property("HardwareVendor")
    }

    fn hardware_video_codecs_decode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("HardwareVideoCodecsDecode")
    }

    fn hardware_video_codecs_encode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("HardwareVideoCodecsEncode")
    }

    fn has3_d_camera(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Has3DCamera")
    }

    fn has3_d_screen(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Has3DScreen")
    }

    fn has_camera(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasCamera")
    }

    fn has_click_wheel(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasClickWheel")
    }

    fn has_keypad(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasKeypad")
    }

    fn has_nfc(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasNFC")
    }

    fn has_qwerty_pad(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasQwertyPad")
    }

    fn has_removable_battery(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasRemovableBattery")
    }

    fn has_touch_screen(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasTouchScreen")
    }

    fn has_track_pad(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasTrackPad")
    }

    fn has_virtual_qwerty(&self) -> AspectPropertyValue<bool> {
        self.bool_property("HasVirtualQwerty")
    }

    fn history(&self) -> AspectPropertyValue<bool> {
        self.bool_property("History")
    }

    fn html_media_capture(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Html-Media-Capture")
    }

    fn html5(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Html5")
    }

    fn html5_audio(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("Html5Audio")
    }

    fn html5_video(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("Html5Video")
    }

    fn html_version(&self) -> AspectPropertyValue<f64> {
        self.double_property("HtmlVersion")
    }

    fn http2(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Http2")
    }

    fn http_live_streaming(&self) -> AspectPropertyValue<String> {
        self.string_property("HttpLiveStreaming")
    }

    fn iframe(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Iframe")
    }

    fn indexed_db(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IndexedDB")
    }

    fn internal_storage_variants(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("InternalStorageVariants")
    }

    fn in_vr_mode(&self) -> AspectPropertyValue<bool> {
        self.bool_property("InVRMode")
    }

    fn is_artificial_intelligence(&self) -> AspectPropertyValue<String> {
        self.string_property("IsArtificialIntelligence")
    }

    fn is_console(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsConsole")
    }

    fn is_crawler(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsCrawler")
    }

    fn is_data_minimising(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsDataMinimising")
    }

    fn is_email_browser(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsEmailBrowser")
    }

    fn is_emulating_desktop(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsEmulatingDesktop")
    }

    fn is_emulating_device(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsEmulatingDevice")
    }

    fn is_e_reader(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsEReader")
    }

    fn is_hardware_group(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsHardwareGroup")
    }

    fn is_media_hub(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsMediaHub")
    }

    fn is_mobile(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsMobile")
    }

    fn is_platform_version_frozen(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsPlatformVersionFrozen")
    }

    fn is_screen_foldable(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsScreenFoldable")
    }

    fn is_small_screen(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsSmallScreen")
    }

    fn is_smart_phone(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsSmartPhone")
    }

    fn is_smart_watch(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsSmartWatch")
    }

    fn is_tablet(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsTablet")
    }

    fn is_tv(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsTv")
    }

    fn is_web_app(&self) -> AspectPropertyValue<bool> {
        self.bool_property("IsWebApp")
    }

    fn iterations(&self) -> AspectPropertyValue<i64> {
        self.integer_property("Iterations")
    }

    fn javascript(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Javascript")
    }

    fn java_script_browser_override(&self) -> AspectPropertyValue<String> {
        self.string_property("JavaScriptBrowserOverride")
    }

    fn javascript_can_manipulate_css(&self) -> AspectPropertyValue<bool> {
        self.bool_property("JavascriptCanManipulateCSS")
    }

    fn javascript_can_manipulate_dom(&self) -> AspectPropertyValue<bool> {
        self.bool_property("JavascriptCanManipulateDOM")
    }

    fn javascript_get_element_by_id(&self) -> AspectPropertyValue<bool> {
        self.bool_property("JavascriptGetElementById")
    }

    fn javascript_get_high_entropy_values(&self) -> AspectPropertyValue<String> {
        self.string_property("JavascriptGetHighEntropyValues")
    }

    fn javascript_hardware_profile(&self) -> AspectPropertyValue<String> {
        self.string_property("JavascriptHardwareProfile")
    }

    fn javascript_image_optimiser(&self) -> AspectPropertyValue<String> {
        self.string_property("JavascriptImageOptimiser")
    }

    fn javascript_preferred_geo_loc_api(&self) -> AspectPropertyValue<String> {
        self.string_property("JavascriptPreferredGeoLocApi")
    }

    fn javascript_supports_event_listener(&self) -> AspectPropertyValue<bool> {
        self.bool_property("JavascriptSupportsEventListener")
    }

    fn javascript_supports_events(&self) -> AspectPropertyValue<bool> {
        self.bool_property("JavascriptSupportsEvents")
    }

    fn javascript_supports_inner_html(&self) -> AspectPropertyValue<bool> {
        self.bool_property("JavascriptSupportsInnerHtml")
    }

    fn javascript_version(&self) -> AspectPropertyValue<String> {
        self.string_property("JavascriptVersion")
    }

    fn jpeg2000(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Jpeg2000")
    }

    fn j_query_mobile_support(&self) -> AspectPropertyValue<String> {
        self.string_property("jQueryMobileSupport")
    }

    fn json(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Json")
    }

    fn layout_engine(&self) -> AspectPropertyValue<String> {
        self.string_property("LayoutEngine")
    }

    fn masking(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Masking")
    }

    fn matched_nodes(&self) -> AspectPropertyValue<i64> {
        self.integer_property("MatchedNodes")
    }

    fn max_internal_storage(&self) -> AspectPropertyValue<f64> {
        self.double_property("MaxInternalStorage")
    }

    fn max_number_of_sim_cards(&self) -> AspectPropertyValue<i64> {
        self.integer_property("MaxNumberOfSIMCards")
    }

    fn max_standby_time(&self) -> AspectPropertyValue<i64> {
        self.integer_property("MaxStandbyTime")
    }

    fn max_talk_time(&self) -> AspectPropertyValue<i64> {
        self.integer_property("MaxTalkTime")
    }

    fn max_usage_time(&self) -> AspectPropertyValue<i64> {
        self.integer_property("MaxUsageTime")
    }

    fn meter(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Meter")
    }

    fn method(&self) -> AspectPropertyValue<String> {
        self.string_property("Method")
    }

    fn midp(&self) -> AspectPropertyValue<f64> {
        self.double_property("MIDP")
    }

    fn native_brand(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("NativeBrand")
    }

    fn native_device(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("NativeDevice")
    }

    fn native_model(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("NativeModel")
    }

    fn native_name(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("NativeName")
    }

    fn native_platform(&self) -> AspectPropertyValue<String> {
        self.string_property("NativePlatform")
    }

    fn number_of_screens(&self) -> AspectPropertyValue<i64> {
        self.integer_property("NumberOfScreens")
    }

    fn oem(&self) -> AspectPropertyValue<String> {
        self.string_property("OEM")
    }

    fn on_power_consumption(&self) -> AspectPropertyValue<i64> {
        self.integer_property("OnPowerConsumption")
    }

    fn pixel_ratio(&self) -> AspectPropertyValue<f64> {
        self.double_property("PixelRatio")
    }

    fn pixel_ratio_javascript(&self) -> AspectPropertyValue<String> {
        self.string_property("PixelRatioJavascript")
    }

    fn platform_discontinued_age(&self) -> AspectPropertyValue<i64> {
        self.integer_property("PlatformDiscontinuedAge")
    }

    fn platform_discontinued_month(&self) -> AspectPropertyValue<String> {
        self.string_property("PlatformDiscontinuedMonth")
    }

    fn platform_discontinued_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("PlatformDiscontinuedYear")
    }

    fn platform_logos(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("PlatformLogos")
    }

    fn platform_name(&self) -> AspectPropertyValue<String> {
        self.string_property("PlatformName")
    }

    fn platform_preview_age(&self) -> AspectPropertyValue<i64> {
        self.integer_property("PlatformPreviewAge")
    }

    fn platform_preview_month(&self) -> AspectPropertyValue<String> {
        self.string_property("PlatformPreviewMonth")
    }

    fn platform_preview_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("PlatformPreviewYear")
    }

    fn platform_rank(&self) -> AspectPropertyValue<i64> {
        self.integer_property("PlatformRank")
    }

    fn platform_release_age(&self) -> AspectPropertyValue<i64> {
        self.integer_property("PlatformReleaseAge")
    }

    fn platform_release_month(&self) -> AspectPropertyValue<String> {
        self.string_property("PlatformReleaseMonth")
    }

    fn platform_release_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("PlatformReleaseYear")
    }

    fn platform_vendor(&self) -> AspectPropertyValue<String> {
        self.string_property("PlatformVendor")
    }

    fn platform_version(&self) -> AspectPropertyValue<String> {
        self.string_property("PlatformVersion")
    }

    fn popularity(&self) -> AspectPropertyValue<String> {
        self.string_property("Popularity")
    }

    fn post_message(&self) -> AspectPropertyValue<bool> {
        self.bool_property("PostMessage")
    }

    fn preload(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Preload")
    }

    fn price_band(&self) -> AspectPropertyValue<String> {
        self.string_property("PriceBand")
    }

    fn profiles(&self) -> AspectPropertyValue<String> {
        self.string_property("Profiles")
    }

    fn progress(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Progress")
    }

    fn promise(&self) -> AspectPropertyValue<String> {
        self.string_property("Promise")
    }

    fn prompts(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Prompts")
    }

    fn refresh_rate(&self) -> AspectPropertyValue<i64> {
        self.integer_property("RefreshRate")
    }

    fn release_age(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ReleaseAge")
    }

    fn release_month(&self) -> AspectPropertyValue<String> {
        self.string_property("ReleaseMonth")
    }

    fn release_year(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ReleaseYear")
    }

    fn satellite_navigation_types(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SatelliteNavigationTypes")
    }

    fn screen_inches_diagonal(&self) -> AspectPropertyValue<f64> {
        self.double_property("ScreenInchesDiagonal")
    }

    fn screen_inches_diagonal_rounded(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenInchesDiagonalRounded")
    }

    fn screen_inches_height(&self) -> AspectPropertyValue<f64> {
        self.double_property("ScreenInchesHeight")
    }

    fn screen_inches_square(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenInchesSquare")
    }

    fn screen_inches_width(&self) -> AspectPropertyValue<f64> {
        self.double_property("ScreenInchesWidth")
    }

    fn screen_mm_diagonal(&self) -> AspectPropertyValue<f64> {
        self.double_property("ScreenMMDiagonal")
    }

    fn screen_mm_diagonal_rounded(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenMMDiagonalRounded")
    }

    fn screen_mm_height(&self) -> AspectPropertyValue<f64> {
        self.double_property("ScreenMMHeight")
    }

    fn screen_mm_square(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenMMSquare")
    }

    fn screen_mm_width(&self) -> AspectPropertyValue<f64> {
        self.double_property("ScreenMMWidth")
    }

    fn screen_pixels_height(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenPixelsHeight")
    }

    fn screen_pixels_height_java_script(&self) -> AspectPropertyValue<String> {
        self.string_property("ScreenPixelsHeightJavaScript")
    }

    fn screen_pixels_physical_height(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenPixelsPhysicalHeight")
    }

    fn screen_pixels_physical_width(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenPixelsPhysicalWidth")
    }

    fn screen_pixels_width(&self) -> AspectPropertyValue<i64> {
        self.integer_property("ScreenPixelsWidth")
    }

    fn screen_pixels_width_java_script(&self) -> AspectPropertyValue<String> {
        self.string_property("ScreenPixelsWidthJavaScript")
    }

    fn screen_type(&self) -> AspectPropertyValue<String> {
        self.string_property("ScreenType")
    }

    fn second_back_camera_mega_pixels(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondBackCameraMegaPixels")
    }

    fn second_front_camera_mega_pixels(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondFrontCameraMegaPixels")
    }

    fn second_screen_inches_diagonal(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondScreenInchesDiagonal")
    }

    fn second_screen_inches_diagonal_rounded(&self) -> AspectPropertyValue<i64> {
        self.integer_property("SecondScreenInchesDiagonalRounded")
    }

    fn second_screen_inches_height(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondScreenInchesHeight")
    }

    fn second_screen_inches_square(&self) -> AspectPropertyValue<i64> {
        self.integer_property("SecondScreenInchesSquare")
    }

    fn second_screen_inches_width(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondScreenInchesWidth")
    }

    fn second_screen_mm_diagonal(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondScreenMMDiagonal")
    }

    fn second_screen_mm_diagonal_rounded(&self) -> AspectPropertyValue<i64> {
        self.integer_property("SecondScreenMMDiagonalRounded")
    }

    fn second_screen_mm_height(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondScreenMMHeight")
    }

    fn second_screen_mm_square(&self) -> AspectPropertyValue<i64> {
        self.integer_property("SecondScreenMMSquare")
    }

    fn second_screen_mm_width(&self) -> AspectPropertyValue<f64> {
        self.double_property("SecondScreenMMWidth")
    }

    fn second_screen_pixels_height(&self) -> AspectPropertyValue<i64> {
        self.integer_property("SecondScreenPixelsHeight")
    }

    fn second_screen_pixels_width(&self) -> AspectPropertyValue<i64> {
        self.integer_property("SecondScreenPixelsWidth")
    }

    fn selector(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Selector")
    }

    fn set_header_browser_accept_ch(&self) -> AspectPropertyValue<String> {
        self.string_property("SetHeaderBrowserAccept-CH")
    }

    fn set_header_hardware_accept_ch(&self) -> AspectPropertyValue<String> {
        self.string_property("SetHeaderHardwareAccept-CH")
    }

    fn set_header_platform_accept_ch(&self) -> AspectPropertyValue<String> {
        self.string_property("SetHeaderPlatformAccept-CH")
    }

    fn so_c(&self) -> AspectPropertyValue<String> {
        self.string_property("SoC")
    }

    fn so_c_designer(&self) -> AspectPropertyValue<String> {
        self.string_property("SoCDesigner")
    }

    fn so_c_model(&self) -> AspectPropertyValue<String> {
        self.string_property("SoCModel")
    }

    fn software_audio_codecs_decode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SoftwareAudioCodecsDecode")
    }

    fn software_audio_codecs_encode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SoftwareAudioCodecsEncode")
    }

    fn software_video_codecs_decode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SoftwareVideoCodecsDecode")
    }

    fn software_video_codecs_encode(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SoftwareVideoCodecsEncode")
    }

    fn specific_absorbtion_rate_eu(&self) -> AspectPropertyValue<f64> {
        self.double_property("SpecificAbsorbtionRateEU")
    }

    fn specific_absorbtion_rate_us(&self) -> AspectPropertyValue<f64> {
        self.double_property("SpecificAbsorbtionRateUS")
    }

    fn streaming_accept(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("StreamingAccept")
    }

    fn suggested_image_button_height_mms(&self) -> AspectPropertyValue<f64> {
        self.double_property("SuggestedImageButtonHeightMms")
    }

    fn suggested_image_button_height_pixels(&self) -> AspectPropertyValue<f64> {
        self.double_property("SuggestedImageButtonHeightPixels")
    }

    fn suggested_link_size_pixels(&self) -> AspectPropertyValue<f64> {
        self.double_property("SuggestedLinkSizePixels")
    }

    fn suggested_link_size_points(&self) -> AspectPropertyValue<f64> {
        self.double_property("SuggestedLinkSizePoints")
    }

    fn supported_bearers(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SupportedBearers")
    }

    fn supported_bluetooth(&self) -> AspectPropertyValue<f64> {
        self.double_property("SupportedBluetooth")
    }

    fn supported_bluetooth_profiles(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SupportedBluetoothProfiles")
    }

    fn supported_bluetooth_version(&self) -> AspectPropertyValue<String> {
        self.string_property("SupportedBluetoothVersion")
    }

    fn supported_camera_features(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SupportedCameraFeatures")
    }

    fn supported_charger_types(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SupportedChargerTypes")
    }

    fn supported_io(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SupportedI/O")
    }

    fn supported_sensor_types(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SupportedSensorTypes")
    }

    fn supported_sim_card_types(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("SupportedSIMCardTypes")
    }

    fn supports24p(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Supports24p")
    }

    fn supports_phone_calls(&self) -> AspectPropertyValue<bool> {
        self.bool_property("SupportsPhoneCalls")
    }

    fn supports_tls_ssl(&self) -> AspectPropertyValue<bool> {
        self.bool_property("SupportsTls/Ssl")
    }

    fn supports_web_gl(&self) -> AspectPropertyValue<bool> {
        self.bool_property("SupportsWebGL")
    }

    fn supports_wi_di(&self) -> AspectPropertyValue<bool> {
        self.bool_property("SupportsWiDi")
    }

    fn svg(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Svg")
    }

    fn tac(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("TAC")
    }

    fn third_party_cookies_enabled(&self) -> AspectPropertyValue<String> {
        self.string_property("ThirdPartyCookiesEnabled")
    }

    fn third_party_cookies_enabled_java_script(&self) -> AspectPropertyValue<String> {
        self.string_property("ThirdPartyCookiesEnabledJavaScript")
    }

    fn touch_events(&self) -> AspectPropertyValue<bool> {
        self.bool_property("TouchEvents")
    }

    fn track(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Track")
    }

    fn user_agents(&self) -> AspectPropertyValue<Vec<String>> {
        self.string_list_property("UserAgents")
    }

    fn video(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Video")
    }

    fn viewport(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Viewport")
    }

    fn web_p(&self) -> AspectPropertyValue<bool> {
        self.bool_property("WebP")
    }

    fn web_workers(&self) -> AspectPropertyValue<bool> {
        self.bool_property("WebWorkers")
    }

    fn weight_with_battery(&self) -> AspectPropertyValue<f64> {
        self.double_property("WeightWithBattery")
    }

    fn weight_without_battery(&self) -> AspectPropertyValue<f64> {
        self.double_property("WeightWithoutBattery")
    }

    fn xhr2(&self) -> AspectPropertyValue<bool> {
        self.bool_property("Xhr2")
    }
}

/// Every generated property paired with its core value type, in name
/// order. The data base uses this to publish per-property metadata.
pub const GENERATED_PROPERTY_TYPES: &[(&str, PropertyValueType)] = &[
    ("AjaxRequestType", PropertyValueType::String),
    ("AnimationTiming", PropertyValueType::Bool),
    ("BackCameraMegaPixels", PropertyValueType::Double),
    ("BatteryCapacity", PropertyValueType::Integer),
    ("BitsPerPixel", PropertyValueType::Integer),
    ("BlobBuilder", PropertyValueType::Bool),
    ("BrowserAudioCodecsDecode", PropertyValueType::StringList),
    ("BrowserAudioCodecsEncode", PropertyValueType::StringList),
    ("BrowserDiscontinuedAge", PropertyValueType::Integer),
    ("BrowserDiscontinuedMonth", PropertyValueType::String),
    ("BrowserDiscontinuedYear", PropertyValueType::Integer),
    ("BrowserFamily", PropertyValueType::String),
    ("BrowserLogos", PropertyValueType::StringList),
    ("BrowserName", PropertyValueType::String),
    ("BrowserPreviewAge", PropertyValueType::Integer),
    ("BrowserPreviewMonth", PropertyValueType::String),
    ("BrowserPreviewYear", PropertyValueType::Integer),
    ("BrowserPropertySource", PropertyValueType::String),
    ("BrowserRank", PropertyValueType::Integer),
    ("BrowserReleaseAge", PropertyValueType::Integer),
    ("BrowserReleaseMonth", PropertyValueType::String),
    ("BrowserReleaseYear", PropertyValueType::Integer),
    ("BrowserSourceProject", PropertyValueType::String),
    ("BrowserSourceProjectVersion", PropertyValueType::String),
    ("BrowserVendor", PropertyValueType::String),
    ("BrowserVersion", PropertyValueType::String),
    ("BrowserVideoCodecsDecode", PropertyValueType::StringList),
    ("BrowserVideoCodecsEncode", PropertyValueType::StringList),
    ("CameraTypes", PropertyValueType::StringList),
    ("Canvas", PropertyValueType::Bool),
    ("CcppAccept", PropertyValueType::StringList),
    ("CLDC", PropertyValueType::Double),
    ("ContrastRatio", PropertyValueType::String),
    ("CookiesCapable", PropertyValueType::Bool),
    ("CPU", PropertyValueType::String),
    ("CPUCores", PropertyValueType::Integer),
    ("CPUDesigner", PropertyValueType::String),
    ("CPUMaximumFrequency", PropertyValueType::Double),
    ("CrawlerName", PropertyValueType::String),
    ("CrawlerProductTokens", PropertyValueType::StringList),
    ("CrawlerUrl", PropertyValueType::String),
    ("CrawlerUsage", PropertyValueType::StringList),
    ("CssBackground", PropertyValueType::Bool),
    ("CssBorderImage", PropertyValueType::Bool),
    ("CssCanvas", PropertyValueType::Bool),
    ("CssColor", PropertyValueType::Bool),
    ("CssColumn", PropertyValueType::Bool),
    ("CssFlexbox", PropertyValueType::Bool),
    ("CssFont", PropertyValueType::Bool),
    ("CssGrid", PropertyValueType::Bool),
    ("CssImages", PropertyValueType::Bool),
    ("CssMediaQueries", PropertyValueType::Bool),
    ("CssMinMax", PropertyValueType::Bool),
    ("CssOverflow", PropertyValueType::Bool),
    ("CssPosition", PropertyValueType::Bool),
    ("CssText", PropertyValueType::Bool),
    ("CssTransforms", PropertyValueType::Bool),
    ("CssTransitions", PropertyValueType::Bool),
    ("CssUI", PropertyValueType::Bool),
    ("DataSet", PropertyValueType::Bool),
    ("DataUrl", PropertyValueType::Bool),
    ("DefaultAppStores", PropertyValueType::StringList),
    ("DeviceCertifications", PropertyValueType::StringList),
    ("DeviceId", PropertyValueType::String),
    ("DeviceOrientation", PropertyValueType::Bool),
    ("DeviceRAM", PropertyValueType::Integer),
    ("DeviceRAMVariants", PropertyValueType::StringList),
    ("DeviceType", PropertyValueType::String),
    ("Difference", PropertyValueType::Integer),
    ("Drift", PropertyValueType::Integer),
    ("Durability", PropertyValueType::StringList),
    ("DynamicContrastRatio", PropertyValueType::String),
    ("EnergyConsumptionPerYear", PropertyValueType::Integer),
    ("ExpansionSlotMaxSize", PropertyValueType::Integer),
    ("ExpansionSlotType", PropertyValueType::StringList),
    ("Fetch", PropertyValueType::Bool),
    ("FileReader", PropertyValueType::Bool),
    ("FileSaver", PropertyValueType::Bool),
    ("FileWriter", PropertyValueType::Bool),
    ("FormData", PropertyValueType::Bool),
    ("FrequencyBands", PropertyValueType::StringList),
    ("FrontCameraMegaPixels", PropertyValueType::Double),
    ("Fullscreen", PropertyValueType::Bool),
    ("GeoLocation", PropertyValueType::Bool),
    ("GPU", PropertyValueType::String),
    ("GPUDesigner", PropertyValueType::String),
    ("HardwareAudioCodecsDecode", PropertyValueType::StringList),
    ("HardwareAudioCodecsEncode", PropertyValueType::StringList),
    ("HardwareCarrier", PropertyValueType::String),
    ("HardwareFamily", PropertyValueType::String),
    ("HardwareImages", PropertyValueType::StringList),
    ("HardwareModel", PropertyValueType::String),
    ("HardwareModelVariants", PropertyValueType::StringList),
    ("HardwareName", PropertyValueType::StringList),
    ("HardwareNamePrefix", PropertyValueType::String),
    ("HardwareNameVersion", PropertyValueType::String),
    ("HardwareProfileSource", PropertyValueType::String),
    ("HardwareRank", PropertyValueType::Integer),
    ("HardwareVendor", PropertyValueType::String),
    ("HardwareVideoCodecsDecode", PropertyValueType::StringList),
    ("HardwareVideoCodecsEncode", PropertyValueType::StringList),
    ("Has3DCamera", PropertyValueType::Bool),
    ("Has3DScreen", PropertyValueType::Bool),
    ("HasCamera", PropertyValueType::Bool),
    ("HasClickWheel", PropertyValueType::Bool),
    ("HasKeypad", PropertyValueType::Bool),
    ("HasNFC", PropertyValueType::Bool),
    ("HasQwertyPad", PropertyValueType::Bool),
    ("HasRemovableBattery", PropertyValueType::Bool),
    ("HasTouchScreen", PropertyValueType::Bool),
    ("HasTrackPad", PropertyValueType::Bool),
    ("HasVirtualQwerty", PropertyValueType::Bool),
    ("History", PropertyValueType::Bool),
    ("Html-Media-Capture", PropertyValueType::Bool),
    ("Html5", PropertyValueType::Bool),
    ("Html5Audio", PropertyValueType::StringList),
    ("Html5Video", PropertyValueType::StringList),
    ("HtmlVersion", PropertyValueType::Double),
    ("Http2", PropertyValueType::Bool),
    ("HttpLiveStreaming", PropertyValueType::String),
    ("Iframe", PropertyValueType::Bool),
    ("IndexedDB", PropertyValueType::Bool),
    ("InternalStorageVariants", PropertyValueType::StringList),
    ("InVRMode", PropertyValueType::Bool),
    ("IsArtificialIntelligence", PropertyValueType::String),
    ("IsConsole", PropertyValueType::Bool),
    ("IsCrawler", PropertyValueType::Bool),
    ("IsDataMinimising", PropertyValueType::Bool),
    ("IsEmailBrowser", PropertyValueType::Bool),
    ("IsEmulatingDesktop", PropertyValueType::Bool),
    ("IsEmulatingDevice", PropertyValueType::Bool),
    ("IsEReader", PropertyValueType::Bool),
    ("IsHardwareGroup", PropertyValueType::Bool),
    ("IsMediaHub", PropertyValueType::Bool),
    ("IsMobile", PropertyValueType::Bool),
    ("IsPlatformVersionFrozen", PropertyValueType::Bool),
    ("IsScreenFoldable", PropertyValueType::Bool),
    ("IsSmallScreen", PropertyValueType::Bool),
    ("IsSmartPhone", PropertyValueType::Bool),
    ("IsSmartWatch", PropertyValueType::Bool),
    ("IsTablet", PropertyValueType::Bool),
    ("IsTv", PropertyValueType::Bool),
    ("IsWebApp", PropertyValueType::Bool),
    ("Iterations", PropertyValueType::Integer),
    ("Javascript", PropertyValueType::Bool),
    ("JavaScriptBrowserOverride", PropertyValueType::JavaScript),
    ("JavascriptCanManipulateCSS", PropertyValueType::Bool),
    ("JavascriptCanManipulateDOM", PropertyValueType::Bool),
    ("JavascriptGetElementById", PropertyValueType::Bool),
    (
        "JavascriptGetHighEntropyValues",
        PropertyValueType::JavaScript,
    ),
    ("JavascriptHardwareProfile", PropertyValueType::JavaScript),
    ("JavascriptImageOptimiser", PropertyValueType::JavaScript),
    ("JavascriptPreferredGeoLocApi", PropertyValueType::String),
    ("JavascriptSupportsEventListener", PropertyValueType::Bool),
    ("JavascriptSupportsEvents", PropertyValueType::Bool),
    ("JavascriptSupportsInnerHtml", PropertyValueType::Bool),
    ("JavascriptVersion", PropertyValueType::String),
    ("Jpeg2000", PropertyValueType::Bool),
    ("jQueryMobileSupport", PropertyValueType::String),
    ("Json", PropertyValueType::Bool),
    ("LayoutEngine", PropertyValueType::String),
    ("Masking", PropertyValueType::Bool),
    ("MatchedNodes", PropertyValueType::Integer),
    ("MaxInternalStorage", PropertyValueType::Double),
    ("MaxNumberOfSIMCards", PropertyValueType::Integer),
    ("MaxStandbyTime", PropertyValueType::Integer),
    ("MaxTalkTime", PropertyValueType::Integer),
    ("MaxUsageTime", PropertyValueType::Integer),
    ("Meter", PropertyValueType::Bool),
    ("Method", PropertyValueType::String),
    ("MIDP", PropertyValueType::Double),
    ("NativeBrand", PropertyValueType::StringList),
    ("NativeDevice", PropertyValueType::StringList),
    ("NativeModel", PropertyValueType::StringList),
    ("NativeName", PropertyValueType::StringList),
    ("NativePlatform", PropertyValueType::String),
    ("NumberOfScreens", PropertyValueType::Integer),
    ("OEM", PropertyValueType::String),
    ("OnPowerConsumption", PropertyValueType::Integer),
    ("PixelRatio", PropertyValueType::Double),
    ("PixelRatioJavascript", PropertyValueType::JavaScript),
    ("PlatformDiscontinuedAge", PropertyValueType::Integer),
    ("PlatformDiscontinuedMonth", PropertyValueType::String),
    ("PlatformDiscontinuedYear", PropertyValueType::Integer),
    ("PlatformLogos", PropertyValueType::StringList),
    ("PlatformName", PropertyValueType::String),
    ("PlatformPreviewAge", PropertyValueType::Integer),
    ("PlatformPreviewMonth", PropertyValueType::String),
    ("PlatformPreviewYear", PropertyValueType::Integer),
    ("PlatformRank", PropertyValueType::Integer),
    ("PlatformReleaseAge", PropertyValueType::Integer),
    ("PlatformReleaseMonth", PropertyValueType::String),
    ("PlatformReleaseYear", PropertyValueType::Integer),
    ("PlatformVendor", PropertyValueType::String),
    ("PlatformVersion", PropertyValueType::String),
    ("Popularity", PropertyValueType::String),
    ("PostMessage", PropertyValueType::Bool),
    ("Preload", PropertyValueType::Bool),
    ("PriceBand", PropertyValueType::String),
    ("Profiles", PropertyValueType::String),
    ("Progress", PropertyValueType::Bool),
    ("Promise", PropertyValueType::String),
    ("Prompts", PropertyValueType::Bool),
    ("RefreshRate", PropertyValueType::Integer),
    ("ReleaseAge", PropertyValueType::Integer),
    ("ReleaseMonth", PropertyValueType::String),
    ("ReleaseYear", PropertyValueType::Integer),
    ("SatelliteNavigationTypes", PropertyValueType::StringList),
    ("ScreenInchesDiagonal", PropertyValueType::Double),
    ("ScreenInchesDiagonalRounded", PropertyValueType::Integer),
    ("ScreenInchesHeight", PropertyValueType::Double),
    ("ScreenInchesSquare", PropertyValueType::Integer),
    ("ScreenInchesWidth", PropertyValueType::Double),
    ("ScreenMMDiagonal", PropertyValueType::Double),
    ("ScreenMMDiagonalRounded", PropertyValueType::Integer),
    ("ScreenMMHeight", PropertyValueType::Double),
    ("ScreenMMSquare", PropertyValueType::Integer),
    ("ScreenMMWidth", PropertyValueType::Double),
    ("ScreenPixelsHeight", PropertyValueType::Integer),
    (
        "ScreenPixelsHeightJavaScript",
        PropertyValueType::JavaScript,
    ),
    ("ScreenPixelsPhysicalHeight", PropertyValueType::Integer),
    ("ScreenPixelsPhysicalWidth", PropertyValueType::Integer),
    ("ScreenPixelsWidth", PropertyValueType::Integer),
    ("ScreenPixelsWidthJavaScript", PropertyValueType::JavaScript),
    ("ScreenType", PropertyValueType::String),
    ("SecondBackCameraMegaPixels", PropertyValueType::Double),
    ("SecondFrontCameraMegaPixels", PropertyValueType::Double),
    ("SecondScreenInchesDiagonal", PropertyValueType::Double),
    (
        "SecondScreenInchesDiagonalRounded",
        PropertyValueType::Integer,
    ),
    ("SecondScreenInchesHeight", PropertyValueType::Double),
    ("SecondScreenInchesSquare", PropertyValueType::Integer),
    ("SecondScreenInchesWidth", PropertyValueType::Double),
    ("SecondScreenMMDiagonal", PropertyValueType::Double),
    ("SecondScreenMMDiagonalRounded", PropertyValueType::Integer),
    ("SecondScreenMMHeight", PropertyValueType::Double),
    ("SecondScreenMMSquare", PropertyValueType::Integer),
    ("SecondScreenMMWidth", PropertyValueType::Double),
    ("SecondScreenPixelsHeight", PropertyValueType::Integer),
    ("SecondScreenPixelsWidth", PropertyValueType::Integer),
    ("Selector", PropertyValueType::Bool),
    ("SetHeaderBrowserAccept-CH", PropertyValueType::String),
    ("SetHeaderHardwareAccept-CH", PropertyValueType::String),
    ("SetHeaderPlatformAccept-CH", PropertyValueType::String),
    ("SoC", PropertyValueType::String),
    ("SoCDesigner", PropertyValueType::String),
    ("SoCModel", PropertyValueType::String),
    ("SoftwareAudioCodecsDecode", PropertyValueType::StringList),
    ("SoftwareAudioCodecsEncode", PropertyValueType::StringList),
    ("SoftwareVideoCodecsDecode", PropertyValueType::StringList),
    ("SoftwareVideoCodecsEncode", PropertyValueType::StringList),
    ("SpecificAbsorbtionRateEU", PropertyValueType::Double),
    ("SpecificAbsorbtionRateUS", PropertyValueType::Double),
    ("StreamingAccept", PropertyValueType::StringList),
    ("SuggestedImageButtonHeightMms", PropertyValueType::Double),
    (
        "SuggestedImageButtonHeightPixels",
        PropertyValueType::Double,
    ),
    ("SuggestedLinkSizePixels", PropertyValueType::Double),
    ("SuggestedLinkSizePoints", PropertyValueType::Double),
    ("SupportedBearers", PropertyValueType::StringList),
    ("SupportedBluetooth", PropertyValueType::Double),
    ("SupportedBluetoothProfiles", PropertyValueType::StringList),
    ("SupportedBluetoothVersion", PropertyValueType::String),
    ("SupportedCameraFeatures", PropertyValueType::StringList),
    ("SupportedChargerTypes", PropertyValueType::StringList),
    ("SupportedI/O", PropertyValueType::StringList),
    ("SupportedSensorTypes", PropertyValueType::StringList),
    ("SupportedSIMCardTypes", PropertyValueType::StringList),
    ("Supports24p", PropertyValueType::Bool),
    ("SupportsPhoneCalls", PropertyValueType::Bool),
    ("SupportsTls/Ssl", PropertyValueType::Bool),
    ("SupportsWebGL", PropertyValueType::Bool),
    ("SupportsWiDi", PropertyValueType::Bool),
    ("Svg", PropertyValueType::Bool),
    ("TAC", PropertyValueType::StringList),
    ("ThirdPartyCookiesEnabled", PropertyValueType::String),
    (
        "ThirdPartyCookiesEnabledJavaScript",
        PropertyValueType::JavaScript,
    ),
    ("TouchEvents", PropertyValueType::Bool),
    ("Track", PropertyValueType::Bool),
    ("UserAgents", PropertyValueType::StringList),
    ("Video", PropertyValueType::Bool),
    ("Viewport", PropertyValueType::Bool),
    ("WebP", PropertyValueType::Bool),
    ("WebWorkers", PropertyValueType::Bool),
    ("WeightWithBattery", PropertyValueType::Double),
    ("WeightWithoutBattery", PropertyValueType::Double),
    ("Xhr2", PropertyValueType::Bool),
];
