# Apple Products Parser

## Links
Crate: https://crates.io/crates/apple_products_parser

Docs: https://docs.rs/apple_products_parser/0.1.3/apple_products_parser/

## Brief Description

**Apple Product Parser** is a simple Rust tool that processes detailed information from JSON about Apple products such as iPhones, MacBooks, and iPads. It extracts key details like product name, price, category, screen size, storage options, available colors, and year of release, and organizes them in a structured format(prints in console as yaml and toml).

The parsed data can be used for analysis, generating reports, or displaying in user interfaces. This project focuses on ensuring the data is accurately processed and made available for further use.

### Grammar Definition
- **ALPHABETIC**: 
{ ('a'..'z' | 'A'..'Z') }
Any letter, uppercase or lowercase
- **Name**:
{ (ALPHABETIC | ASCII_DIGIT | " ")+ }
The product name can consist of letters, digits, or spaces.
- **Price**:
{ ASCII_DIGIT+ ~ "." ~ ASCII_DIGIT{2} }
The price should be digits, followed by a decimal point and two digits for cents.
- **Date of Release**
{ day ~ "-" ~ month ~ "-" ~ year }
Should be in the format dd-mm-yyyy.
- **Day** 
{ ("0" ~ ('1'..'9')) | ("1" ~ ('0'..'9')) | ("2" ~ ('0'..'9')) | ("3" ~ ('0'..'1')) }
A valid day between "01" and "31".
- **Month**: 
{ ("0" ~ ('1'..'9')) | ("1" ~ ('0'..'2')) }
A valid month between "01" and "12".
- **Year**:
 { ASCII_DIGIT{4} }
A four-digit number (e.g., 2022).
- **Type**: 
{ "Smartphone" | "Laptop" | "Tablet" | "Earphones" | "Watch" | "Other" }
The product type can be one of the predefined options.
- **Screen Size**:
{ ASCII_DIGIT+ ~ "." ~ ASCII_DIGIT+ ~ " inches" | "N/A" }
Screen size represented as digits followed by "inches" (e.g., "14.2 inches") or it can be "N/A".
- **Storage**: 
{ (ASCII_DIGIT+ ~ "GB") | (ASCII_DIGIT+ ~ "TB") }
Storage capacity in GB or TB (e.g., "512GB" or "1TB").
- **RAM**: 
{ (ASCII_DIGIT+ ~ "GB") | (ASCII_DIGIT+ ~ "TB") }
RAM size specified in GB or TB (e.g., "16GB" or "1TB").
- **Color**: 
{ (ALPHABETIC | " ")+ }
Colors are represented by letters and spaces (e.g., "Silver" or "Space Gray").
- **Availability**: 
{ "true" | "false" }
Availability is a boolean value, either "true" or "false".

## Usage of Parsed Results
- Data Analysis: You can compare prices, storage sizes, screen sizes, and other features of different Apple products
- Reports: The parsed data can be used to create reports or dashboards that show information about product availability, trends in product features, and pricing
- User Interface Display: The data can be shown on screens where users can filter and sort Apple products by things like price, release year, and screen size


### Example Input
    {
      "name": "iPhone 15 Pro",
      "price": 999.99,
      "type": "Smartphone",
      "screen_size": "6.1 inches",
      "storage": ["128GB", "256GB", "512GB"],
      "color": ["Silver", "Graphite", "Gold", "Pacific Blue"],
      "date_of_release": "12-09-2023"
      "availability": true
    },
    {
      "name": "MacBook Pro 14",
      "price": 1999.99,
      "type": "Laptop",
      "screen_size": "14.2 inches",
      "storage": ["512GB", "1TB", "2TB"],
      "ram": "16GB",
      "color": ["Silver", "Space Gray"],
      "date_of_release": "24-10-2023"
      "availability": true
    }


### Example Output(toml)
```toml
[[]]
name = "iPhone 15 Pro"
price = 999.99
type = "Smartphone"
screen_size = "6.1 inches"
storage = ["128GB", "256GB", "512GB"]
color = ["Silver", "Graphite", "Gold", "Pacific Blue"]
date_of_release = "12-09-2023"
availability = true

[[]]
name = "MacBook Pro 14"
price = 1999.99
type = "Laptop"
screen_size = "14.2 inches"
storage = ["512GB", "1TB", "2TB"]
ram = "16GB"
color = ["Silver", "Space Gray"]
date_of_release = "24-10-2023"
availability = true
```

### Example Output(yaml)
```
- name: iPhone 15 Pro
  price: 999.99
  type: Smartphone
  screen_size: 6.1 inches
  storage:
    - 128GB
    - 256GB
    - 512GB
  color:
    - Silver
    - Graphite
    - Gold
    - Pacific Blue
  date_of_release: 12-09-2023
  availability: true
- name: MacBook Pro 14
  price: 1999.99
  type: Laptop
  screen_size: 14.2 inches
  storage:
    - 512GB
    - 1TB
    - 2TB
  ram: 16GB
  color:
    - Silver
    - Space Gray
  date_of_release: 24-10-2023
  availability: true
```
