From b15900b10086fe511f018fd615e3282e5ad399e5 Mon Sep 17 00:00:00 2001 From: PoiScript Date: Thu, 10 Oct 2019 10:44:59 +0800 Subject: [PATCH] chore: remove orgize-sync package --- .gitignore | 2 +- .travis.yml | 6 +- Cargo.toml | 46 +++++- Procfile | 2 +- RustConfig | 3 +- {orgize/benches => benches}/parse.rs | 0 demos/.gitignore | 1 + {orgize-demos => demos}/Cargo.toml | 5 +- {orgize-demos => demos}/src/main.rs | 0 {orgize/examples => examples}/custom.rs | 0 {orgize/examples => examples}/iter.rs | 0 {orgize/examples => examples}/json.rs | 0 {orgize/fuzz => fuzz}/.gitignore | 0 {orgize/fuzz => fuzz}/Cargo.toml | 0 .../fuzz_targets/fuzz_target_1.rs | 0 orgize-sync/Cargo.toml | 33 ---- orgize-sync/README.md | 84 ---------- orgize-sync/src/conf.rs | 150 ------------------ orgize-sync/src/error.rs | 78 --------- orgize-sync/src/google/auth.rs | 137 ---------------- orgize-sync/src/google/calendar.rs | 0 orgize-sync/src/google/mod.rs | 1 - orgize-sync/src/main.rs | 103 ------------ orgize/Cargo.toml | 38 ----- orgize/README.md | 1 - {orgize/src => src}/config.rs | 0 {orgize/src => src}/elements/block.rs | 0 {orgize/src => src}/elements/clock.rs | 0 {orgize/src => src}/elements/cookie.rs | 0 {orgize/src => src}/elements/drawer.rs | 14 +- {orgize/src => src}/elements/dyn_block.rs | 0 {orgize/src => src}/elements/emphasis.rs | 0 {orgize/src => src}/elements/fn_def.rs | 0 {orgize/src => src}/elements/fn_ref.rs | 0 {orgize/src => src}/elements/inline_call.rs | 2 +- {orgize/src => src}/elements/inline_src.rs | 0 {orgize/src => src}/elements/keyword.rs | 0 {orgize/src => src}/elements/link.rs | 0 {orgize/src => src}/elements/list.rs | 0 {orgize/src => src}/elements/macros.rs | 0 {orgize/src => src}/elements/mod.rs | 0 {orgize/src => src}/elements/planning.rs | 0 {orgize/src => src}/elements/radio_target.rs | 0 {orgize/src => src}/elements/rule.rs | 0 {orgize/src => src}/elements/snippet.rs | 0 {orgize/src => src}/elements/table.rs | 0 {orgize/src => src}/elements/target.rs | 0 {orgize/src => src}/elements/timestamp.rs | 0 {orgize/src => src}/elements/title.rs | 0 {orgize/src => src}/error.rs | 0 {orgize/src => src}/export/html.rs | 0 {orgize/src => src}/export/mod.rs | 0 {orgize/src => src}/export/org.rs | 0 {orgize/src => src}/lib.rs | 3 +- {orgize/src => src}/node.rs | 0 {orgize/src => src}/org.rs | 0 {orgize/src => src}/parsers.rs | 0 {orgize/tests => tests}/node.rs | 0 {orgize/tests => tests}/parse.rs | 0 59 files changed, 62 insertions(+), 647 deletions(-) rename {orgize/benches => benches}/parse.rs (100%) create mode 100644 demos/.gitignore rename {orgize-demos => demos}/Cargo.toml (77%) rename {orgize-demos => demos}/src/main.rs (100%) rename {orgize/examples => examples}/custom.rs (100%) rename {orgize/examples => examples}/iter.rs (100%) rename {orgize/examples => examples}/json.rs (100%) rename {orgize/fuzz => fuzz}/.gitignore (100%) rename {orgize/fuzz => fuzz}/Cargo.toml (100%) rename {orgize/fuzz => fuzz}/fuzz_targets/fuzz_target_1.rs (100%) delete mode 100644 orgize-sync/Cargo.toml delete mode 100644 orgize-sync/README.md delete mode 100644 orgize-sync/src/conf.rs delete mode 100644 orgize-sync/src/error.rs delete mode 100644 orgize-sync/src/google/auth.rs delete mode 100644 orgize-sync/src/google/calendar.rs delete mode 100644 orgize-sync/src/google/mod.rs delete mode 100644 orgize-sync/src/main.rs delete mode 100644 orgize/Cargo.toml delete mode 120000 orgize/README.md rename {orgize/src => src}/config.rs (100%) rename {orgize/src => src}/elements/block.rs (100%) rename {orgize/src => src}/elements/clock.rs (100%) rename {orgize/src => src}/elements/cookie.rs (100%) rename {orgize/src => src}/elements/drawer.rs (84%) rename {orgize/src => src}/elements/dyn_block.rs (100%) rename {orgize/src => src}/elements/emphasis.rs (100%) rename {orgize/src => src}/elements/fn_def.rs (100%) rename {orgize/src => src}/elements/fn_ref.rs (100%) rename {orgize/src => src}/elements/inline_call.rs (99%) rename {orgize/src => src}/elements/inline_src.rs (100%) rename {orgize/src => src}/elements/keyword.rs (100%) rename {orgize/src => src}/elements/link.rs (100%) rename {orgize/src => src}/elements/list.rs (100%) rename {orgize/src => src}/elements/macros.rs (100%) rename {orgize/src => src}/elements/mod.rs (100%) rename {orgize/src => src}/elements/planning.rs (100%) rename {orgize/src => src}/elements/radio_target.rs (100%) rename {orgize/src => src}/elements/rule.rs (100%) rename {orgize/src => src}/elements/snippet.rs (100%) rename {orgize/src => src}/elements/table.rs (100%) rename {orgize/src => src}/elements/target.rs (100%) rename {orgize/src => src}/elements/timestamp.rs (100%) rename {orgize/src => src}/elements/title.rs (100%) rename {orgize/src => src}/error.rs (100%) rename {orgize/src => src}/export/html.rs (100%) rename {orgize/src => src}/export/mod.rs (100%) rename {orgize/src => src}/export/org.rs (100%) rename {orgize/src => src}/lib.rs (99%) rename {orgize/src => src}/node.rs (100%) rename {orgize/src => src}/org.rs (100%) rename {orgize/src => src}/parsers.rs (100%) rename {orgize/tests => tests}/node.rs (100%) rename {orgize/tests => tests}/parse.rs (100%) diff --git a/.gitignore b/.gitignore index 859c83c..4ca2515 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,6 @@ **/*.rs.bk Cargo.lock -orgize/benches/*.org +benches/*.org .gdb_history perf.data* diff --git a/.travis.yml b/.travis.yml index f00f6fc..26ba9ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,11 +14,7 @@ before_script: script: - cargo fmt --all -- --check - - if [ $TRAVIS_RUST_VERSION == "stable" ]; then - cargo test -p orgize-demos -p orgize --all-features; - else - cargo test -p orgize-sync --all-features; - fi + - cargo test --all-features deploy: provider: heroku diff --git a/Cargo.toml b/Cargo.toml index 0cbba1a..0e1e26d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,9 +1,39 @@ -[workspace] -members = [ - "orgize", - "orgize-demos", - "orgize-sync", -] +[package] +name = "orgize" +version = "0.5.0" +authors = ["PoiScript "] +description = "A Rust library for parsing orgmode files." +repository = "https://github.com/PoiScript/orgize" +readme = "README.md" +edition = "2018" +license = "MIT" +keywords = ["orgmode", "emacs", "parser"] +exclude = ["/demos", "/fuzz"] -[profile.release] -lto = true +[package.metadata.docs.rs] +all-features = true + +[badges] +travis-ci = { repository = "PoiScript/orgize" } + +[features] +default = ["ser"] +ser = ["serde", "serde_indextree"] + +[dependencies] +bytecount = "0.6.0" +chrono = { version = "0.4.9", optional = true } +indextree = "4.0.0" +jetscii = "0.4.4" +lazy_static = "1.4.0" +memchr = "2.2.1" +# we don't need to parse any float number, so lexical crate is redundant +nom = { version = "5.0.1", default-features = false, features = ["std"] } +serde = { version = "1.0.101", optional = true, features = ["derive"] } +serde_indextree = { version = "0.2.0", optional = true } +syntect = { version = "3.3.0", optional = true } + +[dev-dependencies] +pretty_assertions = "0.6.1" +serde_json = "1.0.41" +slugify = "0.1.0" diff --git a/Procfile b/Procfile index b5e2e72..4640201 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: ./target/release/orgize-demos +web: ./demos/target/release/orgize-demos diff --git a/RustConfig b/RustConfig index dd250da..bf49938 100644 --- a/RustConfig +++ b/RustConfig @@ -1,2 +1 @@ -VERSION="nightly" -RUST_CARGO_BUILD_FLAGS="--release -p orgize-demos" +RUST_CARGO_BUILD_FLAGS="--release --manifest-path demos/Cargo.toml" diff --git a/orgize/benches/parse.rs b/benches/parse.rs similarity index 100% rename from orgize/benches/parse.rs rename to benches/parse.rs diff --git a/demos/.gitignore b/demos/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/demos/.gitignore @@ -0,0 +1 @@ +target diff --git a/orgize-demos/Cargo.toml b/demos/Cargo.toml similarity index 77% rename from orgize-demos/Cargo.toml rename to demos/Cargo.toml index 2aef164..825156e 100644 --- a/orgize-demos/Cargo.toml +++ b/demos/Cargo.toml @@ -5,8 +5,11 @@ authors = ["PoiScript "] edition = "2018" publish = false +[profile.release] +lto = true + [dependencies] actix-web = { version = "1.0.8", default-features = false } -orgize = { path = "../orgize", features = ["syntect"] } +orgize = { path = "..", features = ["syntect"] } serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" diff --git a/orgize-demos/src/main.rs b/demos/src/main.rs similarity index 100% rename from orgize-demos/src/main.rs rename to demos/src/main.rs diff --git a/orgize/examples/custom.rs b/examples/custom.rs similarity index 100% rename from orgize/examples/custom.rs rename to examples/custom.rs diff --git a/orgize/examples/iter.rs b/examples/iter.rs similarity index 100% rename from orgize/examples/iter.rs rename to examples/iter.rs diff --git a/orgize/examples/json.rs b/examples/json.rs similarity index 100% rename from orgize/examples/json.rs rename to examples/json.rs diff --git a/orgize/fuzz/.gitignore b/fuzz/.gitignore similarity index 100% rename from orgize/fuzz/.gitignore rename to fuzz/.gitignore diff --git a/orgize/fuzz/Cargo.toml b/fuzz/Cargo.toml similarity index 100% rename from orgize/fuzz/Cargo.toml rename to fuzz/Cargo.toml diff --git a/orgize/fuzz/fuzz_targets/fuzz_target_1.rs b/fuzz/fuzz_targets/fuzz_target_1.rs similarity index 100% rename from orgize/fuzz/fuzz_targets/fuzz_target_1.rs rename to fuzz/fuzz_targets/fuzz_target_1.rs diff --git a/orgize-sync/Cargo.toml b/orgize-sync/Cargo.toml deleted file mode 100644 index 402bc02..0000000 --- a/orgize-sync/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "orgize-sync" -version = "0.1.0" -authors = ["PoiScript "] -description = "Sync your Org with your favourite applications." -repository = "https://github.com/PoiScript/orgize" -readme = "README.md" -edition = "2018" -license = "MIT" -keywords = ["orgmode"] - -[package.metadata.docs.rs] -all-features = true - -[features] -default = ["dotenv", "google_calendar", "toggl"] -google_calendar = [] -toggl = [] - -[dependencies] -app_dirs = "1.2.1" -chrono = { version = "0.4.9", features = ["serde"] } -colored = "1.8.0" -dotenv = { version = "0.14.1", optional = true } -futures-preview = "=0.3.0-alpha.18" -isahc = { version = "0.7.3", default-features = false, features = ["json", "http2", "static-curl"] } -orgize = { path = "../orgize", default-features = false, features = ["chrono"] } -serde = { version = "1.0.100", features = ["derive"] } -serde_json = "1.0.40" -structopt = "0.3.1" -tokio = "=0.2.0-alpha.4" -toml = "0.5.3" -url = "2.1.0" diff --git a/orgize-sync/README.md b/orgize-sync/README.md deleted file mode 100644 index 8b8f7f6..0000000 --- a/orgize-sync/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Orgize-sync - -Sync your Org with your favourite applications. - -> This project is still in *alpha stage*. Don't forget to backup -> your orgmode files before trying! - -## Commands - -### `Init` - -// TODO - -### `Sync` - -// TODO - -### `Conf` - -// TODO - -## Configuration - -### General - -> Field with default value is optional. - -**Global**: - -``` toml -# path to dotenv file -env_path = "./.env" # default is `${UserCache}/orgize-sync/.env` - -# number of days to filter headline before today -up_days = 1 # default is 7 -# number of days to filter headline after today -down_days = 1 # default is 7 -``` - -**Pre-file**: - -``` toml -[[file]] -# path to this orgmode file, required -path = "./notes.org" -# specify a name for this file, optional -name = "note" -``` - -### Google Calendar - -**Global**: - -``` toml -[google_calendar] -# google oauth client id and client_secret, required -client_id = "xxx" # or environment variable `GOOGLE_CLIENT_ID` -client_secret = "xxx" # or environment variable `GOOGLE_CLIENT_SECRET` - -# redirect url after authorizing -redirect_uri = "" # default is `http://localhost` - -# control where to store access token and refresh token -token_dir = "" # default is `${UserCache}/orgize-sync` -token_filename = "" # default is `google-token.json` -``` - -**Pre-file**: - -``` toml -[[file]] -# other fields ... -[file.google_calendar] -# which calendar to sync, required -calendar = "" - -# whether to append new calendar event to the org mode -append_new = false # default is true -# where to append new calendar event -append_headline = "" # default is `Sync` - -# which property to store event id -property = "" # default is `EVENT_ID` -``` diff --git a/orgize-sync/src/conf.rs b/orgize-sync/src/conf.rs deleted file mode 100644 index 547b9e7..0000000 --- a/orgize-sync/src/conf.rs +++ /dev/null @@ -1,150 +0,0 @@ -use std::env; -use std::fs; -use std::path::PathBuf; - -use app_dirs::{app_root, AppDataType, AppInfo}; -use serde::{Deserialize, Serialize}; - -pub use crate::conf::google_calendar::*; -use crate::error::Result; - -const APP_INFO: AppInfo = AppInfo { - name: "orgize-sync", - author: "PoiScript", -}; - -pub fn user_config_path() -> PathBuf { - app_root(AppDataType::UserConfig, &APP_INFO).unwrap() -} - -pub fn user_cache_path() -> PathBuf { - app_root(AppDataType::UserCache, &APP_INFO).unwrap() -} - -pub fn default_config_path() -> PathBuf { - let mut path = user_config_path(); - path.push("conf.toml"); - path -} - -pub fn default_env_path() -> PathBuf { - let mut path = user_cache_path(); - path.push(".env"); - path -} - -#[derive(Serialize, Deserialize)] -#[serde(default)] -pub struct Conf { - #[cfg(feature = "dotenv")] - pub env_path: PathBuf, - pub up_days: i64, - pub down_days: i64, - pub files: Vec, - #[cfg(feature = "google_calendar")] - #[serde(skip_serializing_if = "Option::is_none")] - pub google_calendar: Option, -} - -impl Default for Conf { - fn default() -> Self { - Conf { - #[cfg(feature = "dotenv")] - env_path: default_env_path(), - up_days: 7, - down_days: 7, - files: Vec::new(), - google_calendar: None, - } - } -} - -#[derive(Serialize, Deserialize)] -#[serde(default)] -pub struct EnvConf { - pub env_path: PathBuf, -} - -impl Default for EnvConf { - fn default() -> Self { - EnvConf { - env_path: default_env_path(), - } - } -} - -impl Conf { - pub fn new(path: Option) -> Result { - let path = path.unwrap_or_else(default_config_path); - - let content = fs::read(&path).expect(&format!( - "Failed to read fileConf: {}", - path.as_path().display() - )); - - if cfg!(feature = "dotenv") { - let env_conf: EnvConf = toml::from_slice(&content)?; - if env_conf.env_path.as_path().exists() { - dotenv::from_path(env_conf.env_path.as_path())?; - } - } - - Ok(toml::from_slice(&content)?) - } -} - -#[derive(Serialize, Deserialize)] -pub struct FileConf { - pub path: String, - pub name: Option, - #[cfg(feature = "google_calendar")] - #[serde(skip_serializing_if = "Option::is_none")] - pub google_calendar: Option, -} - -#[cfg(feature = "google_calendar")] -pub mod google_calendar { - use super::*; - - #[derive(Serialize, Deserialize)] - #[serde(default)] - pub struct GoogleCalendarGlobalConf { - pub client_id: String, - pub client_secret: String, - pub token_dir: PathBuf, - pub token_filename: String, - pub redirect_uri: String, - } - - impl Default for GoogleCalendarGlobalConf { - fn default() -> Self { - GoogleCalendarGlobalConf { - client_id: env::var("GOOGLE_CLIENT_ID").unwrap(), - client_secret: env::var("GOOGLE_CLIENT_SECRET").unwrap(), - token_dir: user_cache_path(), - token_filename: "google-token.json".into(), - redirect_uri: "http://localhost".into(), - } - } - } - - #[derive(Serialize, Deserialize)] - #[serde(default)] - pub struct GoogleCalendarConf { - pub calendar: String, - pub append_new: bool, - pub append_headline: String, - pub property: String, - } - - impl Default for GoogleCalendarConf { - fn default() -> Self { - GoogleCalendarConf { - calendar: String::new(), - append_new: false, - append_headline: "Sync".into(), - property: "EVENT_ID".into(), - } - } - } -} diff --git a/orgize-sync/src/error.rs b/orgize-sync/src/error.rs deleted file mode 100644 index e114142..0000000 --- a/orgize-sync/src/error.rs +++ /dev/null @@ -1,78 +0,0 @@ -use app_dirs::AppDirsError; -use dotenv::Error as EnvError; -use isahc::http::Error as HttpError; -use isahc::Error as IsahcError; -use serde_json::Error as JsonError; -use std::convert::From; -use std::io::Error as IOError; -use toml::de::Error as TomlDeError; -use toml::ser::Error as TomlSerError; -use url::ParseError; - -#[derive(Debug)] -pub enum Error { - AppDirs(AppDirsError), - Env(EnvError), - Http(IsahcError), - IO(IOError), - TomlDe(TomlDeError), - TomlSer(TomlSerError), - Json(JsonError), - Url(ParseError), -} - -impl From for Error { - fn from(err: AppDirsError) -> Self { - Error::AppDirs(err) - } -} - -impl From for Error { - fn from(err: EnvError) -> Self { - Error::Env(err) - } -} - -impl From for Error { - fn from(err: IOError) -> Self { - Error::IO(err) - } -} - -impl From for Error { - fn from(err: IsahcError) -> Self { - Error::Http(err) - } -} - -impl From for Error { - fn from(err: HttpError) -> Self { - Error::Http(err.into()) - } -} - -impl From for Error { - fn from(err: TomlDeError) -> Self { - Error::TomlDe(err) - } -} - -impl From for Error { - fn from(err: TomlSerError) -> Self { - Error::TomlSer(err) - } -} - -impl From for Error { - fn from(err: JsonError) -> Self { - Error::Json(err) - } -} - -impl From for Error { - fn from(err: ParseError) -> Self { - Error::Url(err) - } -} - -pub type Result = std::result::Result; diff --git a/orgize-sync/src/google/auth.rs b/orgize-sync/src/google/auth.rs deleted file mode 100644 index 97cb01e..0000000 --- a/orgize-sync/src/google/auth.rs +++ /dev/null @@ -1,137 +0,0 @@ -use chrono::{DateTime, Duration, Utc}; -use colored::Colorize; -use isahc::prelude::{Request, RequestExt, ResponseExt}; -use serde::{Deserialize, Serialize}; -use std::fs; -use std::io::{stdin, BufRead}; -use std::path::PathBuf; -use url::Url; - -use crate::conf::GoogleCalendarGlobalConf; -use crate::error::Result; - -#[derive(Serialize, Deserialize)] -pub struct Auth { - access_token: String, - expires_at: DateTime, - refresh_token: String, -} - -impl Auth { - pub async fn new(conf: &GoogleCalendarGlobalConf) -> Result { - let mut path = conf.token_dir.clone(); - path.push(&conf.token_filename); - if let Ok(json) = fs::read_to_string(path) { - Ok(serde_json::from_str(&json)?) - } else { - Auth::sign_in(conf).await - } - } - - pub fn save(&self, conf: &GoogleCalendarGlobalConf) -> Result<()> { - let mut path = conf.token_dir.clone(); - path.push(&conf.token_filename); - fs::write(path, serde_json::to_string(&self)?)?; - Ok(()) - } - - async fn sign_in(config: &GoogleCalendarGlobalConf) -> Result { - let url = Url::parse_with_params( - "https://accounts.google.com/o/oauth2/v2/auth", - &[ - ("client_id", &*config.client_id), - ("response_type", "code"), - ("access_type", "offline"), - ("redirect_uri", &*config.redirect_uri), - ("scope", "https://www.googleapis.com/auth/calendar"), - ], - )?; - - println!("Visit: {}", url.as_str().underline()); - println!("Follow the instructions and paste the code here:"); - - for line in stdin().lock().lines() { - let line = line?; - let code = line.trim(); - - if code.is_empty() { - continue; - } else if code == "q" { - panic!() - } - - let mut response = Request::post("https://www.googleapis.com/oauth2/v4/token") - .header("content-type", "application/x-www-form-urlencoded") - .body(format!( - "code={}&client_id={}&client_secret={}&grant_type={}&redirect_uri={}", - &code, - &config.client_id, - &config.client_secret, - "authorization_code", - "http://localhost" - ))? - .send_async() - .await?; - - if response.status().is_success() { - #[derive(Deserialize)] - struct ConfirmCodeResponse { - access_token: String, - expires_in: i64, - refresh_token: String, - } - - let json = response.json::()?; - - println!("Logging in successfully."); - - let auth = Auth { - access_token: json.access_token, - expires_at: Utc::now() + Duration::seconds(json.expires_in), - refresh_token: json.refresh_token, - }; - - auth.save(config)?; - - return Ok(auth); - } else { - panic!("Failed to authorize."); - } - } - - panic!("Failed to authorize."); - } - - pub async fn refresh(&mut self, config: &GoogleCalendarGlobalConf) -> Result<()> { - let mut response = Request::post("https://www.googleapis.com/oauth2/v4/token") - .header("content-type", "application/x-www-form-urlencoded") - .body(format!( - "client_id={}&client_secret={}&refresh_token={}&grant_type={}", - &config.client_id, &config.client_secret, self.refresh_token, "refresh_token", - ))? - .send_async() - .await?; - - if response.status().is_success() { - #[derive(Deserialize)] - struct RefreshTokenResponse { - access_token: String, - expires_in: i64, - } - - let json = response.json::()?; - - self.access_token = json.access_token; - self.expires_at = Utc::now() + Duration::seconds(json.expires_in); - self.save(config)?; - } else { - panic!(""); - } - - Ok(()) - } - - pub fn is_valid(&self) -> bool { - self.expires_at > Utc::now() - } -} diff --git a/orgize-sync/src/google/calendar.rs b/orgize-sync/src/google/calendar.rs deleted file mode 100644 index e69de29..0000000 diff --git a/orgize-sync/src/google/mod.rs b/orgize-sync/src/google/mod.rs deleted file mode 100644 index 0e4a05d..0000000 --- a/orgize-sync/src/google/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod auth; diff --git a/orgize-sync/src/main.rs b/orgize-sync/src/main.rs deleted file mode 100644 index d3d23a7..0000000 --- a/orgize-sync/src/main.rs +++ /dev/null @@ -1,103 +0,0 @@ -mod conf; -mod error; -mod google; - -use std::fs; -use std::path::PathBuf; -use structopt::StructOpt; -use toml::to_string_pretty; - -use crate::conf::{ - default_config_path, default_env_path, user_cache_path, user_config_path, Conf, EnvConf, -}; -use crate::error::Result; -use crate::google::auth::Auth; - -#[derive(StructOpt, Debug)] -#[structopt(name = "orgize-sync")] -struct Opt { - #[structopt(subcommand)] - subcommand: Cmd, -} - -#[derive(StructOpt, Debug)] -enum Cmd { - #[structopt(name = "init")] - Init, - #[structopt(name = "sync")] - Sync { - #[structopt(long = "skip-google-calendar")] - skip_google_calendar: bool, - #[structopt(long = "skip-toggl")] - skip_toggl: bool, - #[structopt(short = "c", long = "conf", parse(from_os_str))] - conf_path: Option, - }, - #[structopt(name = "conf")] - Conf { - #[structopt(short = "c", long = "conf", parse(from_os_str))] - conf_path: Option, - }, -} - -#[tokio::main] -async fn main() -> Result<()> { - let opt = Opt::from_args(); - - match opt.subcommand { - Cmd::Init => { - fs::create_dir_all(user_config_path())?; - fs::create_dir_all(user_cache_path())?; - - let default_env_path = default_env_path(); - let default_config_path = default_config_path(); - - if default_env_path.as_path().exists() { - println!( - "{} already existed, skipping ...", - default_env_path.as_path().display() - ); - } else { - println!("Creating {} ...", default_env_path.as_path().display()); - fs::write(default_env_path.clone(), "")?; - } - - if default_config_path.as_path().exists() { - println!( - "{} already existed, skipping ...", - default_config_path.as_path().display() - ); - } else { - println!("Creating {} ...", default_config_path.as_path().display()); - fs::write( - default_config_path, - to_string_pretty(&EnvConf { - env_path: default_env_path, - })?, - )?; - } - } - Cmd::Sync { - conf_path, - skip_google_calendar, - skip_toggl, - } => { - let conf = Conf::new(conf_path)?; - - if cfg!(feature = "google_calendar") && !skip_google_calendar { - if let Some(google_calendar) = conf.google_calendar { - let auth = Auth::new(&google_calendar).await; - } - } - - if cfg!(feature = "toggl") && !skip_toggl {} - } - Cmd::Conf { conf_path } => { - let conf = Conf::new(conf_path)?; - - println!("{}", to_string_pretty(&conf)?); - } - } - - Ok(()) -} diff --git a/orgize/Cargo.toml b/orgize/Cargo.toml deleted file mode 100644 index 1a53406..0000000 --- a/orgize/Cargo.toml +++ /dev/null @@ -1,38 +0,0 @@ -[package] -name = "orgize" -version = "0.5.0" -authors = ["PoiScript "] -description = "A Rust library for parsing orgmode files." -repository = "https://github.com/PoiScript/orgize" -readme = "README.md" -edition = "2018" -license = "MIT" -keywords = ["orgmode", "emacs", "parser"] - -[package.metadata.docs.rs] -all-features = true - -[badges] -travis-ci = { repository = "PoiScript/orgize" } - -[features] -default = ["ser"] -ser = ["serde", "serde_indextree"] - -[dependencies] -bytecount = "0.6.0" -chrono = { version = "0.4.9", optional = true } -indextree = "4.0.0" -jetscii = "0.4.4" -lazy_static = "1.4.0" -memchr = "2.2.1" -# we don't need to parse any float number, so lexical crate is redundant -nom = { version = "5.0.1", default-features = false, features = ["std"] } -serde = { version = "1.0.101", optional = true, features = ["derive"] } -serde_indextree = { version = "0.2.0", optional = true } -syntect = { version = "3.3.0", optional = true } - -[dev-dependencies] -pretty_assertions = "0.6.1" -serde_json = "1.0.41" -slugify = "0.1.0" diff --git a/orgize/README.md b/orgize/README.md deleted file mode 120000 index 32d46ee..0000000 --- a/orgize/README.md +++ /dev/null @@ -1 +0,0 @@ -../README.md \ No newline at end of file diff --git a/orgize/src/config.rs b/src/config.rs similarity index 100% rename from orgize/src/config.rs rename to src/config.rs diff --git a/orgize/src/elements/block.rs b/src/elements/block.rs similarity index 100% rename from orgize/src/elements/block.rs rename to src/elements/block.rs diff --git a/orgize/src/elements/clock.rs b/src/elements/clock.rs similarity index 100% rename from orgize/src/elements/clock.rs rename to src/elements/clock.rs diff --git a/orgize/src/elements/cookie.rs b/src/elements/cookie.rs similarity index 100% rename from orgize/src/elements/cookie.rs rename to src/elements/cookie.rs diff --git a/orgize/src/elements/drawer.rs b/src/elements/drawer.rs similarity index 84% rename from orgize/src/elements/drawer.rs rename to src/elements/drawer.rs index 033303a..cbdeb08 100644 --- a/orgize/src/elements/drawer.rs +++ b/src/elements/drawer.rs @@ -62,5 +62,17 @@ fn parse() { " :CUSTOM_ID: id\n" ) )) - ) + ); + assert_eq!( + parse_drawer::>(":PROPERTIES:\n :END:"), + Ok(( + "", + ( + Drawer { + name: "PROPERTIES".into() + }, + "" + ) + )) + ); } diff --git a/orgize/src/elements/dyn_block.rs b/src/elements/dyn_block.rs similarity index 100% rename from orgize/src/elements/dyn_block.rs rename to src/elements/dyn_block.rs diff --git a/orgize/src/elements/emphasis.rs b/src/elements/emphasis.rs similarity index 100% rename from orgize/src/elements/emphasis.rs rename to src/elements/emphasis.rs diff --git a/orgize/src/elements/fn_def.rs b/src/elements/fn_def.rs similarity index 100% rename from orgize/src/elements/fn_def.rs rename to src/elements/fn_def.rs diff --git a/orgize/src/elements/fn_ref.rs b/src/elements/fn_ref.rs similarity index 100% rename from orgize/src/elements/fn_ref.rs rename to src/elements/fn_ref.rs diff --git a/orgize/src/elements/inline_call.rs b/src/elements/inline_call.rs similarity index 99% rename from orgize/src/elements/inline_call.rs rename to src/elements/inline_call.rs index 80b60f6..8605e76 100644 --- a/orgize/src/elements/inline_call.rs +++ b/src/elements/inline_call.rs @@ -11,7 +11,7 @@ use nom::{ /// Inline Babel Call Object #[cfg_attr(test, derive(PartialEq))] #[cfg_attr(feature = "ser", derive(serde::Serialize))] -#[derive(Debug)] +#[derive(Debug, Default)] pub struct InlineCall<'a> { /// Called code block name pub name: Cow<'a, str>, diff --git a/orgize/src/elements/inline_src.rs b/src/elements/inline_src.rs similarity index 100% rename from orgize/src/elements/inline_src.rs rename to src/elements/inline_src.rs diff --git a/orgize/src/elements/keyword.rs b/src/elements/keyword.rs similarity index 100% rename from orgize/src/elements/keyword.rs rename to src/elements/keyword.rs diff --git a/orgize/src/elements/link.rs b/src/elements/link.rs similarity index 100% rename from orgize/src/elements/link.rs rename to src/elements/link.rs diff --git a/orgize/src/elements/list.rs b/src/elements/list.rs similarity index 100% rename from orgize/src/elements/list.rs rename to src/elements/list.rs diff --git a/orgize/src/elements/macros.rs b/src/elements/macros.rs similarity index 100% rename from orgize/src/elements/macros.rs rename to src/elements/macros.rs diff --git a/orgize/src/elements/mod.rs b/src/elements/mod.rs similarity index 100% rename from orgize/src/elements/mod.rs rename to src/elements/mod.rs diff --git a/orgize/src/elements/planning.rs b/src/elements/planning.rs similarity index 100% rename from orgize/src/elements/planning.rs rename to src/elements/planning.rs diff --git a/orgize/src/elements/radio_target.rs b/src/elements/radio_target.rs similarity index 100% rename from orgize/src/elements/radio_target.rs rename to src/elements/radio_target.rs diff --git a/orgize/src/elements/rule.rs b/src/elements/rule.rs similarity index 100% rename from orgize/src/elements/rule.rs rename to src/elements/rule.rs diff --git a/orgize/src/elements/snippet.rs b/src/elements/snippet.rs similarity index 100% rename from orgize/src/elements/snippet.rs rename to src/elements/snippet.rs diff --git a/orgize/src/elements/table.rs b/src/elements/table.rs similarity index 100% rename from orgize/src/elements/table.rs rename to src/elements/table.rs diff --git a/orgize/src/elements/target.rs b/src/elements/target.rs similarity index 100% rename from orgize/src/elements/target.rs rename to src/elements/target.rs diff --git a/orgize/src/elements/timestamp.rs b/src/elements/timestamp.rs similarity index 100% rename from orgize/src/elements/timestamp.rs rename to src/elements/timestamp.rs diff --git a/orgize/src/elements/title.rs b/src/elements/title.rs similarity index 100% rename from orgize/src/elements/title.rs rename to src/elements/title.rs diff --git a/orgize/src/error.rs b/src/error.rs similarity index 100% rename from orgize/src/error.rs rename to src/error.rs diff --git a/orgize/src/export/html.rs b/src/export/html.rs similarity index 100% rename from orgize/src/export/html.rs rename to src/export/html.rs diff --git a/orgize/src/export/mod.rs b/src/export/mod.rs similarity index 100% rename from orgize/src/export/mod.rs rename to src/export/mod.rs diff --git a/orgize/src/export/org.rs b/src/export/org.rs similarity index 100% rename from orgize/src/export/org.rs rename to src/export/org.rs diff --git a/orgize/src/lib.rs b/src/lib.rs similarity index 99% rename from orgize/src/lib.rs rename to src/lib.rs index b85338a..48099b8 100644 --- a/orgize/src/lib.rs +++ b/src/lib.rs @@ -221,14 +221,13 @@ #![allow(clippy::range_plus_one)] mod config; +mod error; pub mod elements; pub mod export; mod node; mod org; mod parsers; -mod error; - // Re-export of the indextree crate. pub use indextree; #[cfg(feature = "syntect")] diff --git a/orgize/src/node.rs b/src/node.rs similarity index 100% rename from orgize/src/node.rs rename to src/node.rs diff --git a/orgize/src/org.rs b/src/org.rs similarity index 100% rename from orgize/src/org.rs rename to src/org.rs diff --git a/orgize/src/parsers.rs b/src/parsers.rs similarity index 100% rename from orgize/src/parsers.rs rename to src/parsers.rs diff --git a/orgize/tests/node.rs b/tests/node.rs similarity index 100% rename from orgize/tests/node.rs rename to tests/node.rs diff --git a/orgize/tests/parse.rs b/tests/parse.rs similarity index 100% rename from orgize/tests/parse.rs rename to tests/parse.rs