From 9e2258209a35c228387950c6e809778608da2185 Mon Sep 17 00:00:00 2001 From: omagdy7 Date: Mon, 24 Oct 2022 11:17:48 +0200 Subject: Added all necessary data to the binary for shiping a stand-alone binary --- Cargo.lock | 46 ++++- Cargo.toml | 3 +- debug.txt | 516 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/generation.rs | 10 +- src/ui.rs | 32 ++-- 5 files changed, 580 insertions(+), 27 deletions(-) create mode 100644 debug.txt diff --git a/Cargo.lock b/Cargo.lock index 4206a98..aada68b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -86,10 +86,11 @@ dependencies = [ [[package]] name = "gof-rs" -version = "0.2.1" +version = "0.2.2" dependencies = [ "colored", "crossterm", + "include_dir", "rand", "tui", ] @@ -103,6 +104,25 @@ dependencies = [ "libc", ] +[[package]] +name = "include_dir" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +dependencies = [ + "proc-macro2", + "quote", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -175,6 +195,24 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +[[package]] +name = "proc-macro2" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + [[package]] name = "rand" version = "0.8.5" @@ -269,6 +307,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "unicode-ident" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" + [[package]] name = "unicode-segmentation" version = "1.9.0" diff --git a/Cargo.toml b/Cargo.toml index 21dd101..704ef52 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gof-rs" -version = "0.2.1" +version = "0.2.2" license = "MIT" authors = ["Omar Magdy "] description = "Game of life in your terminal with over 500 unique patterns to choose from." @@ -14,6 +14,7 @@ include = ["src/", "presets/patterns/*.txt"] [dependencies] colored = "2.0.0" crossterm = "0.25.0" +include_dir = "0.7.3" rand = "0.8.5" tui = "0.19.0" diff --git a/debug.txt b/debug.txt new file mode 100644 index 0000000..c206f4f --- /dev/null +++ b/debug.txt @@ -0,0 +1,516 @@ + Compiling gof-rs v0.2.1 (/home/pengu/test/rust-dev/gof-rs) + Finished dev [unoptimized + debuginfo] target(s) in 0.80s + Running `target/debug/gof-rs` +"pattern1.txt" +"pattern10.txt" +"pattern100.txt" +"pattern101.txt" +"pattern102.txt" +"pattern103.txt" +"pattern104.txt" +"pattern105.txt" +"pattern106.txt" +"pattern107.txt" +"pattern108.txt" +"pattern109.txt" +"pattern11.txt" +"pattern110.txt" +"pattern111.txt" +"pattern112.txt" +"pattern113.txt" +"pattern114.txt" +"pattern115.txt" +"pattern116.txt" +"pattern117.txt" +"pattern118.txt" +"pattern119.txt" +"pattern12.txt" +"pattern120.txt" +"pattern121.txt" +"pattern122.txt" +"pattern123.txt" +"pattern124.txt" +"pattern125.txt" +"pattern126.txt" +"pattern127.txt" +"pattern128.txt" +"pattern129.txt" +"pattern13.txt" +"pattern130.txt" +"pattern131.txt" +"pattern132.txt" +"pattern133.txt" +"pattern134.txt" +"pattern135.txt" +"pattern136.txt" +"pattern137.txt" +"pattern138.txt" +"pattern139.txt" +"pattern14.txt" +"pattern140.txt" +"pattern141.txt" +"pattern142.txt" +"pattern143.txt" +"pattern144.txt" +"pattern145.txt" +"pattern146.txt" +"pattern147.txt" +"pattern148.txt" +"pattern149.txt" +"pattern15.txt" +"pattern150.txt" +"pattern151.txt" +"pattern152.txt" +"pattern153.txt" +"pattern154.txt" +"pattern155.txt" +"pattern156.txt" +"pattern157.txt" +"pattern158.txt" +"pattern159.txt" +"pattern16.txt" +"pattern160.txt" +"pattern161.txt" +"pattern162.txt" +"pattern163.txt" +"pattern164.txt" +"pattern165.txt" +"pattern166.txt" +"pattern167.txt" +"pattern168.txt" +"pattern169.txt" +"pattern17.txt" +"pattern170.txt" +"pattern171.txt" +"pattern172.txt" +"pattern173.txt" +"pattern174.txt" +"pattern175.txt" +"pattern176.txt" +"pattern177.txt" +"pattern178.txt" +"pattern179.txt" +"pattern18.txt" +"pattern180.txt" +"pattern181.txt" +"pattern182.txt" +"pattern183.txt" +"pattern184.txt" +"pattern185.txt" +"pattern186.txt" +"pattern187.txt" +"pattern188.txt" +"pattern189.txt" +"pattern19.txt" +"pattern190.txt" +"pattern191.txt" +"pattern192.txt" +"pattern193.txt" +"pattern194.txt" +"pattern195.txt" +"pattern196.txt" +"pattern197.txt" +"pattern198.txt" +"pattern199.txt" +"pattern2.txt" +"pattern20.txt" +"pattern200.txt" +"pattern201.txt" +"pattern202.txt" +"pattern203.txt" +"pattern204.txt" +"pattern205.txt" +"pattern206.txt" +"pattern207.txt" +"pattern208.txt" +"pattern209.txt" +"pattern21.txt" +"pattern210.txt" +"pattern211.txt" +"pattern212.txt" +"pattern213.txt" +"pattern214.txt" +"pattern215.txt" +"pattern216.txt" +"pattern217.txt" +"pattern218.txt" +"pattern219.txt" +"pattern22.txt" +"pattern220.txt" +"pattern221.txt" +"pattern222.txt" +"pattern223.txt" +"pattern224.txt" +"pattern225.txt" +"pattern226.txt" +"pattern227.txt" +"pattern228.txt" +"pattern229.txt" +"pattern23.txt" +"pattern230.txt" +"pattern231.txt" +"pattern232.txt" +"pattern233.txt" +"pattern234.txt" +"pattern235.txt" +"pattern236.txt" +"pattern237.txt" +"pattern238.txt" +"pattern239.txt" +"pattern24.txt" +"pattern240.txt" +"pattern241.txt" +"pattern242.txt" +"pattern243.txt" +"pattern244.txt" +"pattern245.txt" +"pattern246.txt" +"pattern247.txt" +"pattern248.txt" +"pattern249.txt" +"pattern25.txt" +"pattern250.txt" +"pattern251.txt" +"pattern252.txt" +"pattern253.txt" +"pattern254.txt" +"pattern255.txt" +"pattern256.txt" +"pattern257.txt" +"pattern258.txt" +"pattern259.txt" +"pattern26.txt" +"pattern260.txt" +"pattern261.txt" +"pattern262.txt" +"pattern263.txt" +"pattern264.txt" +"pattern265.txt" +"pattern266.txt" +"pattern267.txt" +"pattern268.txt" +"pattern269.txt" +"pattern27.txt" +"pattern270.txt" +"pattern271.txt" +"pattern272.txt" +"pattern273.txt" +"pattern274.txt" +"pattern275.txt" +"pattern276.txt" +"pattern277.txt" +"pattern278.txt" +"pattern279.txt" +"pattern28.txt" +"pattern280.txt" +"pattern281.txt" +"pattern282.txt" +"pattern283.txt" +"pattern284.txt" +"pattern285.txt" +"pattern286.txt" +"pattern287.txt" +"pattern288.txt" +"pattern289.txt" +"pattern29.txt" +"pattern290.txt" +"pattern291.txt" +"pattern292.txt" +"pattern293.txt" +"pattern294.txt" +"pattern295.txt" +"pattern296.txt" +"pattern297.txt" +"pattern298.txt" +"pattern299.txt" +"pattern3.txt" +"pattern30.txt" +"pattern300.txt" +"pattern301.txt" +"pattern302.txt" +"pattern303.txt" +"pattern304.txt" +"pattern305.txt" +"pattern306.txt" +"pattern307.txt" +"pattern308.txt" +"pattern309.txt" +"pattern31.txt" +"pattern310.txt" +"pattern311.txt" +"pattern312.txt" +"pattern313.txt" +"pattern314.txt" +"pattern315.txt" +"pattern316.txt" +"pattern317.txt" +"pattern318.txt" +"pattern319.txt" +"pattern32.txt" +"pattern320.txt" +"pattern321.txt" +"pattern322.txt" +"pattern323.txt" +"pattern324.txt" +"pattern325.txt" +"pattern326.txt" +"pattern327.txt" +"pattern328.txt" +"pattern329.txt" +"pattern33.txt" +"pattern330.txt" +"pattern331.txt" +"pattern332.txt" +"pattern333.txt" +"pattern334.txt" +"pattern335.txt" +"pattern336.txt" +"pattern337.txt" +"pattern338.txt" +"pattern339.txt" +"pattern34.txt" +"pattern340.txt" +"pattern341.txt" +"pattern342.txt" +"pattern343.txt" +"pattern344.txt" +"pattern345.txt" +"pattern346.txt" +"pattern347.txt" +"pattern348.txt" +"pattern349.txt" +"pattern35.txt" +"pattern350.txt" +"pattern351.txt" +"pattern352.txt" +"pattern353.txt" +"pattern354.txt" +"pattern355.txt" +"pattern356.txt" +"pattern357.txt" +"pattern358.txt" +"pattern359.txt" +"pattern36.txt" +"pattern360.txt" +"pattern361.txt" +"pattern362.txt" +"pattern363.txt" +"pattern364.txt" +"pattern365.txt" +"pattern366.txt" +"pattern367.txt" +"pattern368.txt" +"pattern369.txt" +"pattern37.txt" +"pattern370.txt" +"pattern371.txt" +"pattern372.txt" +"pattern373.txt" +"pattern374.txt" +"pattern375.txt" +"pattern376.txt" +"pattern377.txt" +"pattern378.txt" +"pattern379.txt" +"pattern38.txt" +"pattern380.txt" +"pattern381.txt" +"pattern382.txt" +"pattern383.txt" +"pattern384.txt" +"pattern385.txt" +"pattern386.txt" +"pattern387.txt" +"pattern388.txt" +"pattern389.txt" +"pattern39.txt" +"pattern390.txt" +"pattern391.txt" +"pattern392.txt" +"pattern393.txt" +"pattern394.txt" +"pattern395.txt" +"pattern396.txt" +"pattern397.txt" +"pattern398.txt" +"pattern399.txt" +"pattern4.txt" +"pattern40.txt" +"pattern400.txt" +"pattern401.txt" +"pattern402.txt" +"pattern403.txt" +"pattern404.txt" +"pattern405.txt" +"pattern406.txt" +"pattern407.txt" +"pattern408.txt" +"pattern409.txt" +"pattern41.txt" +"pattern410.txt" +"pattern411.txt" +"pattern412.txt" +"pattern413.txt" +"pattern414.txt" +"pattern415.txt" +"pattern416.txt" +"pattern417.txt" +"pattern418.txt" +"pattern419.txt" +"pattern42.txt" +"pattern420.txt" +"pattern421.txt" +"pattern422.txt" +"pattern423.txt" +"pattern424.txt" +"pattern425.txt" +"pattern426.txt" +"pattern427.txt" +"pattern428.txt" +"pattern429.txt" +"pattern43.txt" +"pattern430.txt" +"pattern431.txt" +"pattern432.txt" +"pattern433.txt" +"pattern434.txt" +"pattern435.txt" +"pattern436.txt" +"pattern437.txt" +"pattern438.txt" +"pattern439.txt" +"pattern44.txt" +"pattern440.txt" +"pattern441.txt" +"pattern442.txt" +"pattern443.txt" +"pattern444.txt" +"pattern445.txt" +"pattern446.txt" +"pattern447.txt" +"pattern448.txt" +"pattern449.txt" +"pattern45.txt" +"pattern450.txt" +"pattern451.txt" +"pattern452.txt" +"pattern453.txt" +"pattern454.txt" +"pattern455.txt" +"pattern456.txt" +"pattern457.txt" +"pattern458.txt" +"pattern459.txt" +"pattern46.txt" +"pattern460.txt" +"pattern461.txt" +"pattern462.txt" +"pattern463.txt" +"pattern464.txt" +"pattern465.txt" +"pattern466.txt" +"pattern467.txt" +"pattern468.txt" +"pattern469.txt" +"pattern47.txt" +"pattern470.txt" +"pattern471.txt" +"pattern472.txt" +"pattern473.txt" +"pattern474.txt" +"pattern475.txt" +"pattern476.txt" +"pattern477.txt" +"pattern478.txt" +"pattern479.txt" +"pattern48.txt" +"pattern480.txt" +"pattern481.txt" +"pattern482.txt" +"pattern483.txt" +"pattern484.txt" +"pattern485.txt" +"pattern486.txt" +"pattern487.txt" +"pattern488.txt" +"pattern489.txt" +"pattern49.txt" +"pattern490.txt" +"pattern491.txt" +"pattern492.txt" +"pattern493.txt" +"pattern494.txt" +"pattern495.txt" +"pattern496.txt" +"pattern497.txt" +"pattern498.txt" +"pattern499.txt" +"pattern5.txt" +"pattern50.txt" +"pattern500.txt" +"pattern501.txt" +"pattern502.txt" +"pattern503.txt" +"pattern504.txt" +"pattern505.txt" +"pattern506.txt" +"pattern507.txt" +"pattern508.txt" +"pattern509.txt" +"pattern51.txt" +"pattern510.txt" +"pattern511.txt" +"pattern512.txt" +"pattern513.txt" +"pattern52.txt" +"pattern53.txt" +"pattern54.txt" +"pattern55.txt" +"pattern56.txt" +"pattern57.txt" +"pattern58.txt" +"pattern59.txt" +"pattern6.txt" +"pattern60.txt" +"pattern61.txt" +"pattern62.txt" +"pattern63.txt" +"pattern64.txt" +"pattern65.txt" +"pattern66.txt" +"pattern67.txt" +"pattern68.txt" +"pattern69.txt" +"pattern7.txt" +"pattern70.txt" +"pattern71.txt" +"pattern72.txt" +"pattern73.txt" +"pattern74.txt" +"pattern75.txt" +"pattern76.txt" +"pattern77.txt" +"pattern78.txt" +"pattern79.txt" +"pattern8.txt" +"pattern80.txt" +"pattern81.txt" +"pattern82.txt" +"pattern83.txt" +"pattern84.txt" +"pattern85.txt" +"pattern86.txt" +"pattern87.txt" +"pattern88.txt" +"pattern89.txt" +"pattern9.txt" +"pattern90.txt" +"pattern91.txt" +"pattern92.txt" +"pattern93.txt" +"pattern94.txt" +"pattern95.txt" +"pattern96.txt" +"pattern97.txt" +"pattern98.txt" +"pattern99.txt" diff --git a/src/generation.rs b/src/generation.rs index 63aa3e3..f58bba9 100644 --- a/src/generation.rs +++ b/src/generation.rs @@ -159,13 +159,13 @@ pub fn next_gen(app: &mut App) -> Gen { nxt_gen } -pub fn gen_from_file(path: &PathBuf) -> Gen { +pub fn gen_from_file(s : &String) -> Gen { let mut gen = Gen::new(); - let file = File::open(path).expect("File not found"); - let reader = BufReader::new(file); + // let file = File::open(path).expect("File not found"); + // let reader = BufReader::new(file); - for line in reader.lines() { - let line = line.unwrap(); + for line in s.lines() { + let line = line; let mut row: Vec = vec![]; for ch in line.chars() { if ch == '.' { diff --git a/src/ui.rs b/src/ui.rs index 73a345f..692e3e3 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -18,9 +18,12 @@ use tui::{ widgets::{Block, Borders, List, ListItem, ListState, Paragraph}, Frame, Terminal, }; +use include_dir::{include_dir, Dir}; use crate::generation::*; +static PRESETS_DIR : Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/presets/patterns/"); + pub struct StatefulList { state: ListState, items: Vec, @@ -74,7 +77,7 @@ impl StatefulList { /// Check the event handling at the bottom to see how to change the state on incoming events. /// Check the drawing logic for items on how to specify the highlighting style for selected items. pub struct App { - pub items: StatefulList<(String, PathBuf)>, + pub items: StatefulList<(String, String)>, pub flag_cur: bool, pub layout: Layout, pub cur_gen: Gen, @@ -82,29 +85,18 @@ pub struct App { impl App { pub fn new() -> App { - fn read_presets() -> io::Result> { + fn read_presets() -> Vec<(String, String)> { let mut result = Vec::new(); - for path in std::fs::read_dir("./presets/patterns")? { - let path = path?.path(); - if !path.is_file() { - continue; - } - if let Some(file_name) = path.file_name() { - let file_name = file_name.to_string_lossy(); - if file_name.starts_with("pattern") && file_name.ends_with(".txt") { - result.push((file_name.trim_end_matches(".txt").to_owned(), path)); - } - } + for i in 1..=513 { + let file_name = format!("pattern{}.txt", i); + let file = PRESETS_DIR.get_file(file_name.to_owned()).unwrap(); + let body = file.contents_utf8().unwrap().to_owned(); + result.push((file_name, body)); } - result.sort_by_key(|(name, _)| { - name.trim_start_matches("pattern") - .parse::() - .unwrap_or(0) - }); - Ok(result) + result } App { - items: StatefulList::with_items(read_presets().unwrap_or_else(|_| Vec::new())), + items: StatefulList::with_items(read_presets()), flag_cur: false, layout: Layout::default() .direction(Direction::Horizontal) -- cgit v1.2.3