ydke_parser 0.2.0

A parser for YGOPro deck URLs in the YDKE format
Documentation
use ydke_parser::{Deck, parse_url, to_url, parse_urls, to_urls, YdkeError};

#[test]
fn test_url_parsing() {
    let deck = Deck {
        main: vec![26077387, 26077387],
        extra: vec![63288574],
        side: vec![37351133],
    };
    let url = to_url(&deck);
    let parsed_deck = parse_url(&url).unwrap();
    assert_eq!(deck.main[0], parsed_deck.main[0]);
    assert_eq!(deck, parsed_deck);
}

#[test]
fn test_invalid_ydke_url() {
    let result = parse_url("invalid://test");
    assert!(matches!(result, Err(YdkeError::NotYdkeUrl)));
}

#[test]
fn test_empty_deck() {
    let deck = Deck {
        main: vec![],
        extra: vec![],
        side: vec![],
    };
    let url = to_url(&deck);
    let parsed = parse_url(&url).unwrap();
    assert_eq!(deck, parsed);
}

#[test]
fn test_multiple_url_parsing() {
    let decks = vec![
        Deck {
            main: vec![26077387, 37351133],
            extra: vec![63288574],
            side: vec![],
        },
        Deck {
            main: vec![26077387],
            extra: vec![],
            side: vec![37351133],
        },
    ];
    
    let urls = to_urls(&decks);
    let parsed_decks = parse_urls(&[&urls[0], &urls[1]]).unwrap();
    assert_eq!(decks, parsed_decks);
}

#[test]
fn test_large_deck() {
    let main_deck: Vec<u32> = (0..60).map(|_| 26077387).collect();
    let extra_deck: Vec<u32> = (0..15).map(|_| 63288574).collect();
    let side_deck: Vec<u32> = (0..15).map(|_| 37351133).collect();
    
    let deck = Deck {
        main: main_deck,
        extra: extra_deck,
        side: side_deck,
    };
    
    let url = to_url(&deck);
    let parsed_deck = parse_url(&url).unwrap();
    assert_eq!(deck, parsed_deck);
    assert_eq!(parsed_deck.main.len(), 60);
    assert_eq!(parsed_deck.extra.len(), 15);
    assert_eq!(parsed_deck.side.len(), 15);
}