# rs3a This library provides a structural representation of [3a ascii animations format](https://github.com/DomesticMoth/3a) and methods for reading and writing it. This lib on [crates.io](https://crates.io/crates/rs3a) - [Used in](#used-in) - [Usage](#usage) - [Short API description](#short-api-description) - [Structs](#structs) - [Functions](#functions) ## Used in - [aaa](https://github.com/DomesticMoth/aaa) - Tui tool for 3a files rendering ## Usage Add this to your `Cargo.toml`: ```toml [dependencies] rs3a = "1" ``` Here's a simple example that parsing a string in 3a format and displaying a header: ```rust use rs3a; const COLORTABLE_EXAMPLE: &str = " width 32 height 19 loop false colors full title colortable demo author Moth in ' ab ' ffffffffffffffffffffffffffffffff00000000000000000000000000000000 a-foreground, b-background ffffffffffffffffffffffffffffffff00000000000000000000000000000000 ffffffffffffffffffffffffffffffff00000000000000000000000000000000 00 01 02 03 04 05 06 07 0000000000000000000000000000000000001111222233334444555566667777 10 11 12 13 14 15 16 17 1111111111111111111111111111111100001111222233334444555566667777 20 21 22 23 24 25 26 27 2222222222222222222222222222222200001111222233334444555566667777 30 31 32 33 34 35 36 37 3333333333333333333333333333333300001111222233334444555566667777 40 41 42 43 44 45 46 47 4444444444444444444444444444444400001111222233334444555566667777 50 51 52 53 54 55 56 57 5555555555555555555555555555555500001111222233334444555566667777 60 61 62 63 64 65 66 67 6666666666666666666666666666666600001111222233334444555566667777 70 71 72 73 74 75 76 77 7777777777777777777777777777777700001111222233334444555566667777 80 81 82 83 84 85 86 87 8888888888888888888888888888888800001111222233334444555566667777 90 91 92 93 94 95 96 97 9999999999999999999999999999999900001111222233334444555566667777 a0 a1 a2 a3 a4 a5 a6 a7 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00001111222233334444555566667777 b0 b1 b2 b3 b4 b5 b6 b7 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00001111222233334444555566667777 c0 c1 c2 c3 c4 c5 c6 c7 cccccccccccccccccccccccccccccccc00001111222233334444555566667777 d0 d1 d2 d3 d4 d5 d6 d7 dddddddddddddddddddddddddddddddd00001111222233334444555566667777 e0 e1 e2 e3 e4 e5 e6 e7 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00001111222233334444555566667777 f0 f1 f2 f3 f4 f5 f6 f7 ffffffffffffffffffffffffffffffff00001111222233334444555566667777"; fn main() { let art = rs3a::load(COLORTABLE_EXAMPLE.to_string()).unwrap(); println!("{:?}", art.header); } ``` ## Short API description ### Structs The core of the library is the Art type, which implements the 3a structure: ```rust struct Art{ pub header: Header, pub body: Body, } ``` Header type contains information about the header of 3a file: ```rust struct Header{ width: u16, height: u16, delay: u16, loop_enable: bool, color_mod: ColorMod, utf8: bool, datacols: u16, preview: u16, audio: Option, title: Option, author: Option, } ``` Body type contains an array of frames, where each frame is an array of rows, and each row is an array of row fragments: ```rust struct Body{ frames: Vec } type Frame = Vec; type Row = Vec; ``` Each RowFragment is a set of consecutive symbols with the same values of foreground and background colors: ```rust struct RowFragment{ text: String, fg_color: Option, bg_color: Option, } ``` ### Functions `load` and `save` functions allow you to convert strings to `Art` and back. `load_file` and `save_file` functions allow you to read 3a files to `Art` and write `Art` to 3a files.