diff --git a/.gitignore b/.gitignore index 3658b9b..c74e80b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ devenv.local.yaml # Added by cargo /target +/.session diff --git a/.session b/.session deleted file mode 100644 index acb0b6a..0000000 --- a/.session +++ /dev/null @@ -1,50 +0,0 @@ -let SessionLoad = 1 -let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 -let v:this_session=expand(":p") -doautoall SessionLoadPre -silent only -silent tabonly -cd ~/Projects/shelf -if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == '' - let s:wipebuf = bufnr('%') -endif -let s:shortmess_save = &shortmess -set shortmess+=aoO -badd +8 devenv.nix -argglobal -%argdel -$argadd devenv.nix -edit devenv.nix -argglobal -setlocal foldmethod=manual -setlocal foldexpr=0 -setlocal foldmarker={{{,}}} -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldenable -silent! normal! zE -let &fdl = &fdl -let s:l = 8 - ((7 * winheight(0) + 22) / 45) -if s:l < 1 | let s:l = 1 | endif -keepjumps exe s:l -normal! zt -keepjumps 8 -normal! 054| -tabnext 1 -if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0 && getbufvar(s:wipebuf, '&buftype') isnot# 'terminal' - silent exe 'bwipe ' . s:wipebuf -endif -unlet! s:wipebuf -set winheight=1 winwidth=20 -let &shortmess = s:shortmess_save -let s:sx = expand(":p:r")."x.vim" -if filereadable(s:sx) - exe "source " . fnameescape(s:sx) -endif -let &g:so = s:so_save | let &g:siso = s:siso_save -nohlsearch -doautoall SessionLoadPost -unlet SessionLoad -" vim: set ft=vim : diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..2b63e8b --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,107 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "shelf" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 34f425c..d4df6d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,5 @@ version = "0.1.0" edition = "2024" [dependencies] +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" diff --git a/src/main.rs b/src/main.rs index e7a11a9..afdf455 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,65 @@ +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use std::{env, fs, path::Path, process}; + fn main() { - println!("Hello, world!"); + let mut args = env::args(); + let _binary = args.next(); + + while let Some(arg) = args.next() { + match arg.as_str() { + "add" => add(&mut args), + _other => println!("needs parameters"), + } + } + return; +} + +fn deserialize_var() -> Library { + let key = "HOME"; + let content: Library = match env::var(key) { + Ok(val) => match serde_json::from_str(&val) { + Ok(library) => library, + Err(..) => initialize_library(), + }, + Err(..) => initialize_library(), + }; + return content; +} + +fn initialize_library() -> Library { + let default_shelf: Shelf = Shelf { + id: 0, + name: "default".to_string(), + content: Vec::new(), + }; + + let mut shelf_vec: Vec = Vec::new(); + shelf_vec.push(default_shelf); + let default_library: Library = Library { + current_shelf: 0, + shelves: shelf_vec, + }; + return default_library; +} + +fn add(args: &mut env::Args) { + for file in args { + println!("Adding {}", &file); + let file_path = Path::new(&file); + } + process::exit(0) +} + +#[derive(Default, Deserialize, Serialize)] +struct Library { + current_shelf: u16, + shelves: Vec, +} + +#[derive(Deserialize, Serialize)] +struct Shelf { + id: u64, + name: String, + content: Vec, }