Skip to content

User agent parser in rust. Get browser, device and os infos from a ua string.

License

Notifications You must be signed in to change notification settings

OssamaZ/uaparser-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

User Agent Parser

Simple implementation of the user agent parser based on the ua-parser/specification.

Installation

Install the package through Cargo

cargo add uaparser-rs

Or add manually to your Cargo.toml file

[dependencies]

# Add the dependency
uaparser-rs = "0.1.0"

Usage

use uaparser_rs::UAParser;

let uap = UAParser::from_yaml("./regexes.yaml").unwrap();
let ua_str = "Mozilla/5.0 (Linux; Android 4.0.1; Galaxy Nexus Build/ITL41F) AppleWebKit 537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31";

let client = uap.parse(ua_str);

parse(&str) returns a client object containing browser, os and device data.

  client {
    user_agent {
      family: String,
      major: Option<String>,
      minor: Option<String>,
      patch: Option<String>,
      patch_minor: Option<String>,
    },
    os: {
      family: String,
      major: Option<String>,
      minor: Option<String>,
      patch: Option<String>,
      patch_minor: Option<String>,
    },
    device: {
      family: String,
      brand: Option<String>,
      model: Option<String>,
    }
  }

Example:

// User Agent
assert_eq!(client.user_agent.family, "Chrome Mobile");
assert_eq!(client.user_agent.major, Some(String::from("26")));
assert_eq!(client.user_agent.minor, Some(String::from("0")));
assert_eq!(client.user_agent.patch, Some(String::from("1410")));
assert_eq!(client.user_agent.patch_minor, Some(String::from("58")));

// Os
assert_eq!(client.os.family, "Android");
assert_eq!(client.os.major, Some(String::from("4")));
assert_eq!(client.os.minor, Some(String::from("0")));
assert_eq!(client.os.patch, Some(String::from("1")));

// Device
assert_eq!(client.device.family, "Samsung Galaxy Nexus");
assert_eq!(client.device.brand, Some(String::from("Samsung")));
assert_eq!(client.device.model, Some(String::from("Galaxy Nexus")));

TODO:

  • Add an is_bot() -> bool for known bot agents.
  • Add a FromStr implementation.
  • Use Clone on Write to avoid unnecessary allocations.

About

User agent parser in rust. Get browser, device and os infos from a ua string.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages