2022-09-25 01:24:31 +00:00
/*
* Vento , a CLI inventory for your files .
* Copyright ( C ) 2022 Lux Aliaga
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https ://www.gnu.org/licenses/>.
*
* /
use anyhow ::Result ;
use man ::prelude ::* ;
use std ::env ;
use std ::fs ::{ create_dir_all , File } ;
use std ::io ::Write ;
fn main ( ) -> Result < ( ) > {
if cfg! ( unix ) {
let pages = [ vento ( ) ? , take ( ) ? , drop ( ) ? ] ;
let tempdir = env ::temp_dir ( ) . join ( " vento-man " ) ;
create_dir_all ( tempdir . clone ( ) ) ? ;
for page in 0 .. pages . len ( ) {
let tempfile = tempdir . join ( pages [ page ] . clone ( ) . 1 ) ;
let mut file = File ::create ( tempfile ) . unwrap ( ) ;
write! ( & mut file , " {} " , pages [ page ] . clone ( ) . 0 ) . unwrap ( ) ;
}
}
Ok ( ( ) )
}
fn vento ( ) -> Result < ( String , String ) > {
let page = Manual ::new ( " vento " )
. about ( " a CLI inventory for your files " )
. author ( Author ::new ( " Lux Aliaga " ) . email ( " they@mint.lgbt " ) )
. description ( " List files and directories in the currently active inventory, the files in SLOT, the files in DIRECTORY or the files in DIRECTORY in SLOT. " )
. flag (
Flag ::new ( )
2022-09-26 19:54:39 +00:00
. short ( " -c " )
2022-09-25 01:24:31 +00:00
. long ( " --switch " )
. help ( " Switches inventory slots " ) ,
)
. flag (
Flag ::new ( )
. short ( " -i " )
. long ( " --init " )
. help ( " Initializes Vento with all its respective directories " ) ,
)
. flag (
Flag ::new ( )
. short ( " -h " )
. long ( " --help " )
. help ( " Shows the help message " ) ,
)
2022-09-26 19:54:39 +00:00
. option (
Opt ::new ( " slot " )
. short ( " -s " )
. long ( " --slot " )
. help ( " The slot to list " ) ,
)
2022-09-25 01:24:31 +00:00
. arg ( Arg ::new ( " [DIRECTORY] " ) )
. custom (
Section ::new ( " before starting " )
. paragraph ( " Vento will first need to initialize the respective directories before usage. Do this by running vento -i. " )
)
. render ( ) ;
Ok ( ( page , String ::from ( " vento.1 " ) ) )
}
fn take ( ) -> Result < ( String , String ) > {
let page = Manual ::new ( " take " )
. about ( " a file grabber for Vento " )
. author ( Author ::new ( " Lux Aliaga " ) . email ( " they@mint.lgbt " ) )
. description ( " Take FILE and put it in the inventory. " )
. option (
Opt ::new ( " slot " )
. short ( " -s " )
. long ( " --slot " )
. help ( " The slot to put the file in " ) ,
)
. arg ( Arg ::new ( " FILE " ) )
. render ( ) ;
Ok ( ( page , String ::from ( " take.1 " ) ) )
}
fn drop ( ) -> Result < ( String , String ) > {
let page = Manual ::new ( " drop " )
. about ( " a file dropper for Vento " )
. author ( Author ::new ( " Lux Aliaga " ) . email ( " they@mint.lgbt " ) )
. description ( " Take FILE off the inventory and drop it in DESTINATION. " )
. option (
Opt ::new ( " slot " )
. short ( " -s " )
. long ( " --slot " )
. help ( " The slot to take the file from " ) ,
)
. arg ( Arg ::new ( " FILE " ) )
. arg ( Arg ::new ( " [DESTINATION] " ) )
. render ( ) ;
Ok ( ( page , String ::from ( " drop.1 " ) ) )
}