#![allow(clippy::all, unused_imports)]
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Access {
#[default]
#[serde(rename = "read")]
Read,
#[serde(rename = "write")]
Write,
#[serde(rename = "destructive")]
Destructive,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct AccountStatus {
pub server: Option<String>,
pub ssl: Option<bool>,
pub email: Option<String>,
#[serde(rename = "loggedIn")]
pub logged_in: bool,
#[serde(rename = "tokenValid")]
pub token_valid: Option<bool>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Activity {
pub days: Vec<DayWords>,
pub devices: Vec<DeviceWords>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Appearance {
#[serde(rename = "entryId")]
pub entry_id: i32,
pub name: String,
pub r#type: EntryKind,
#[serde(rename = "sceneCount")]
pub scene_count: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ArchivedScene {
pub id: i32,
pub name: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ArchivedScenes {
pub scenes: Vec<ArchivedScene>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Backup {
pub date: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Backups {
pub backups: Vec<Backup>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Cadence {
#[default]
#[serde(rename = "day")]
Day,
#[serde(rename = "week")]
Week,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ChapterWords {
pub id: i32,
pub name: String,
pub words: i32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ConflictChoice {
#[default]
#[serde(rename = "abort")]
Abort,
#[serde(rename = "local")]
Local,
#[serde(rename = "server")]
Server,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct DayWords {
pub date: String,
pub words: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct DeviceWords {
pub device: String,
pub words: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct DraftApplied {
#[serde(rename = "sceneId")]
pub scene_id: i32,
#[serde(rename = "previousDraftId")]
pub previous_draft_id: Option<i32>,
#[serde(rename = "wordCount")]
pub word_count: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct DraftInfo {
pub id: i32,
pub name: String,
pub created: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct DraftText {
pub id: i32,
#[serde(rename = "sceneId")]
pub scene_id: i32,
pub name: String,
pub created: String,
pub markdown: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Drafts {
pub drafts: Vec<DraftInfo>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum EntityKind {
#[default]
#[serde(rename = "scene")]
Scene,
#[serde(rename = "note")]
Note,
#[serde(rename = "entry")]
Entry,
#[serde(rename = "timeline")]
Timeline,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Entries {
pub entries: Vec<EntrySummary>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Entry {
pub id: i32,
pub name: String,
pub r#type: EntryKind,
pub text: String,
pub tags: Vec<String>,
pub aliases: Vec<String>,
#[serde(rename = "hasImage")]
pub has_image: bool,
#[serde(rename = "referencedBy")]
pub referenced_by: Vec<i32>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct EntryCount {
pub r#type: EntryKind,
pub count: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct EntryImage {
pub extension: String,
#[serde(with = "crate::base64::bytes")]
pub content: Vec<u8>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum EntryKind {
#[default]
#[serde(rename = "person")]
Person,
#[serde(rename = "place")]
Place,
#[serde(rename = "thing")]
Thing,
#[serde(rename = "event")]
Event,
#[serde(rename = "idea")]
Idea,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct EntrySummary {
pub id: i32,
pub name: String,
pub r#type: EntryKind,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub aliases: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ExportFormat {
pub id: String,
#[serde(rename = "fileExtension")]
pub file_extension: String,
#[serde(rename = "mimeType")]
pub mime_type: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ExportFormats {
pub formats: Vec<ExportFormat>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ExportedFile {
#[serde(rename = "fileName")]
pub file_name: String,
#[serde(rename = "mimeType")]
pub mime_type: String,
#[serde(with = "crate::base64::bytes")]
pub content: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Idea {
pub id: String,
pub title: Option<String>,
pub content: String,
pub tags: Vec<String>,
pub created: String,
pub updated: String,
pub promoted: Option<String>,
pub archived: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Ideas {
pub ideas: Vec<Idea>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ImportFileFormat {
#[default]
#[serde(rename = "markdown")]
Markdown,
#[serde(rename = "rtf")]
Rtf,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum MarkdownSplit {
#[default]
#[serde(rename = "auto")]
Auto,
#[serde(rename = "h1")]
H1,
#[serde(rename = "h2")]
H2,
#[serde(rename = "pattern")]
Pattern,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Note {
pub id: i32,
pub created: String,
pub tags: Vec<String>,
pub content: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Notes {
pub notes: Vec<Note>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct OperationDescriptor {
pub name: String,
pub description: String,
pub access: Access,
pub scope: OperationScope,
pub input: BTreeMap<String, serde_json::Value>,
pub output: BTreeMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct OperationList {
pub operations: Vec<OperationDescriptor>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum OperationScope {
#[default]
#[serde(rename = "content")]
Content,
#[serde(rename = "account")]
Account,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct PagedScene {
pub id: i32,
pub name: String,
pub path: Vec<String>,
pub markdown: String,
#[serde(rename = "wordCount")]
pub word_count: i32,
pub meta: SceneMeta,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectImported {
pub name: String,
pub scenes: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectInfo {
pub name: String,
#[serde(rename = "projectId")]
pub project_id: String,
pub created: Option<String>,
#[serde(rename = "lastAccessed")]
pub last_accessed: Option<String>,
#[serde(rename = "authorName")]
pub author_name: Option<String>,
pub language: Option<String>,
pub tags: Vec<String>,
#[serde(rename = "wordCountGoal")]
pub word_count_goal: Option<WordGoal>,
#[serde(rename = "wordCount")]
pub word_count: Option<i32>,
#[serde(rename = "sceneCount")]
pub scene_count: Option<i32>,
#[serde(rename = "lastEdited")]
pub last_edited: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectList {
pub projects: Vec<ProjectSummary>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectName {
pub name: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectStats {
#[serde(rename = "totalWords")]
pub total_words: i32,
#[serde(rename = "sceneCount")]
pub scene_count: i32,
pub chapters: Vec<ChapterWords>,
#[serde(rename = "longestScene")]
pub longest_scene: Option<SceneWords>,
#[serde(rename = "shortestSceneWords")]
pub shortest_scene_words: i32,
#[serde(rename = "medianSceneWords")]
pub median_scene_words: i32,
#[serde(rename = "noteCount")]
pub note_count: i32,
#[serde(rename = "timelineEventCount")]
pub timeline_event_count: i32,
#[serde(rename = "entryCounts")]
pub entry_counts: Vec<EntryCount>,
#[serde(rename = "topAppearances")]
pub top_appearances: Vec<Appearance>,
#[serde(rename = "wordCountGoal")]
pub word_count_goal: Option<WordGoal>,
#[serde(rename = "lastEdited")]
pub last_edited: Option<String>,
#[serde(rename = "lastEditedScene")]
pub last_edited_scene: Option<SceneRef>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectSummary {
pub name: String,
#[serde(rename = "projectId")]
pub project_id: String,
#[serde(rename = "wordCount")]
pub word_count: Option<i32>,
pub created: Option<String>,
#[serde(rename = "lastAccessed")]
pub last_accessed: Option<String>,
#[serde(rename = "lastEdited")]
pub last_edited: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectSyncResult {
pub name: String,
pub outcome: SyncOutcome,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ProjectSyncStatus {
pub name: String,
pub linked: bool,
#[serde(rename = "lastSync")]
pub last_sync: Option<String>,
#[serde(rename = "pendingChanges")]
pub pending_changes: i32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum RtfSplit {
#[default]
#[serde(rename = "formatting")]
Formatting,
#[serde(rename = "pattern")]
Pattern,
#[serde(rename = "single")]
Single,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneItemRef {
pub id: i32,
pub name: String,
pub kind: SceneKind,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum SceneKind {
#[default]
#[serde(rename = "scene")]
Scene,
#[serde(rename = "group")]
Group,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneMeta {
pub outline: String,
pub notes: String,
pub tags: Vec<String>,
#[serde(rename = "currentDraft")]
pub current_draft: String,
pub created: Option<String>,
#[serde(rename = "lastEdited")]
pub last_edited: Option<String>,
pub references: Vec<i32>,
#[serde(rename = "dismissedReferences")]
pub dismissed_references: Vec<i32>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneNode {
pub id: i32,
pub name: String,
pub kind: SceneKind,
#[serde(rename = "wordCount")]
pub word_count: i32,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ScenePage {
pub scenes: Vec<PagedScene>,
pub next: Option<i32>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneRef {
pub id: i32,
pub name: String,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneText {
pub id: i32,
pub name: String,
pub archived: bool,
pub markdown: String,
#[serde(rename = "wordCount")]
pub word_count: i32,
pub meta: SceneMeta,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneTree {
pub nodes: Vec<SceneNode>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneWordCount {
#[serde(rename = "wordCount")]
pub word_count: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneWords {
pub id: i32,
pub name: String,
pub words: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SceneWriteResult {
#[serde(rename = "draftId")]
pub draft_id: Option<i32>,
#[serde(rename = "previousDraftId")]
pub previous_draft_id: Option<i32>,
#[serde(rename = "wordCount")]
pub word_count: i32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum SearchFilter {
#[default]
#[serde(rename = "all")]
All,
#[serde(rename = "scenes")]
Scenes,
#[serde(rename = "notes")]
Notes,
#[serde(rename = "encyclopedia")]
Encyclopedia,
#[serde(rename = "timeline")]
Timeline,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SearchHit {
pub kind: EntityKind,
pub id: i32,
pub title: String,
pub snippet: String,
#[serde(rename = "matchStart")]
pub match_start: i32,
#[serde(rename = "matchEnd")]
pub match_end: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SearchResults {
pub results: Vec<SearchHit>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Session {
pub device: String,
#[serde(rename = "startedAt")]
pub started_at: String,
#[serde(rename = "endedAt")]
pub ended_at: String,
pub words: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Sessions {
pub sessions: Vec<Session>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum SyncOutcome {
#[default]
#[serde(rename = "success")]
Success,
#[serde(rename = "unchanged")]
Unchanged,
#[serde(rename = "needs_resolution")]
NeedsResolution,
#[serde(rename = "failed")]
Failed,
#[serde(rename = "skipped")]
Skipped,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SyncRunResult {
#[serde(rename = "accountSynced")]
pub account_synced: bool,
#[serde(rename = "ideasSynced")]
pub ideas_synced: bool,
pub projects: Vec<ProjectSyncResult>,
pub log: Vec<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct SyncStatus {
pub projects: Vec<ProjectSyncStatus>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct TagCount {
pub tag: String,
pub count: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct TaggedEntities {
pub entities: Vec<TaggedEntity>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct TaggedEntity {
pub kind: EntityKind,
pub id: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Tags {
pub tags: Vec<TagCount>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Timeline {
pub events: Vec<TimelineEntry>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct TimelineEntry {
pub id: i32,
pub order: i32,
pub date: Option<String>,
pub content: String,
pub tags: Vec<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct WordGoal {
pub cadence: Cadence,
pub count: i32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum WriteMode {
#[default]
#[serde(rename = "draft")]
Draft,
#[serde(rename = "live")]
Live,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SearchOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<SearchFilter>,
}
pub fn search(project: &str, query: &str, options: SearchOptions) -> crate::Result<SearchResults> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
query: &'a str,
#[serde(flatten)]
options: SearchOptions,
}
crate::call("search", &Input { project, query, options })
}
pub mod account {
use super::*;
pub fn login(url: &str, email: &str, password: &str) -> crate::Result<AccountStatus> {
#[derive(Serialize)]
struct Input<'a> {
url: &'a str,
email: &'a str,
password: &'a str,
}
crate::call("account.login", &Input { url, email, password })
}
pub fn logout() -> crate::Result<AccountStatus> {
#[derive(Serialize)]
struct Input {
}
crate::call("account.logout", &Input { })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct AccountStatusOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub check: Option<bool>,
}
pub fn status(options: AccountStatusOptions) -> crate::Result<AccountStatus> {
#[derive(Serialize)]
struct Input {
#[serde(flatten)]
options: AccountStatusOptions,
}
crate::call("account.status", &Input { options })
}
}
pub mod backup {
use super::*;
pub fn create(project: &str) -> crate::Result<Backup> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
}
crate::call("backup.create", &Input { project })
}
pub fn list(project: &str) -> crate::Result<Backups> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
}
crate::call("backup.list", &Input { project })
}
}
pub mod draft {
use super::*;
pub fn apply(project: &str, id: i32) -> crate::Result<DraftApplied> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("draft.apply", &Input { project, id })
}
pub fn create(project: &str, scene_id: i32, name: &str) -> crate::Result<DraftInfo> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(rename = "sceneId")]
scene_id: i32,
name: &'a str,
}
crate::call("draft.create", &Input { project, scene_id, name })
}
pub fn delete(project: &str, id: i32) -> crate::Result<DraftInfo> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("draft.delete", &Input { project, id })
}
pub fn list(project: &str, scene_id: i32) -> crate::Result<Drafts> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(rename = "sceneId")]
scene_id: i32,
}
crate::call("draft.list", &Input { project, scene_id })
}
pub fn read(project: &str, id: i32) -> crate::Result<DraftText> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("draft.read", &Input { project, id })
}
}
pub mod entry {
use super::*;
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct EntryCreateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
}
pub fn create(project: &str, name: &str, r#type: EntryKind, text: &str, options: EntryCreateOptions) -> crate::Result<Entry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
name: &'a str,
r#type: EntryKind,
text: &'a str,
#[serde(flatten)]
options: EntryCreateOptions,
}
crate::call("entry.create", &Input { project, name, r#type, text, options })
}
pub fn delete(project: &str, id: i32) -> crate::Result<EntrySummary> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("entry.delete", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct EntryListOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<EntryKind>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
pub fn list(project: &str, options: EntryListOptions) -> crate::Result<Entries> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(flatten)]
options: EntryListOptions,
}
crate::call("entry.list", &Input { project, options })
}
pub fn read(project: &str, id: i32) -> crate::Result<Entry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("entry.read", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct EntryUpdateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
}
pub fn update(project: &str, id: i32, text: &str, options: EntryUpdateOptions) -> crate::Result<Entry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
text: &'a str,
#[serde(flatten)]
options: EntryUpdateOptions,
}
crate::call("entry.update", &Input { project, id, text, options })
}
pub mod image {
use super::*;
pub fn get(project: &str, id: i32) -> crate::Result<EntryImage> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("entry.image.get", &Input { project, id })
}
pub fn remove(project: &str, id: i32) -> crate::Result<Entry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("entry.image.remove", &Input { project, id })
}
pub fn set(project: &str, id: i32, extension: &str, content: &[u8]) -> crate::Result<Entry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
extension: &'a str,
#[serde(serialize_with = "crate::base64::serialize")]
content: &'a [u8],
}
crate::call("entry.image.set", &Input { project, id, extension, content })
}
}
}
pub mod export {
use super::*;
pub fn formats() -> crate::Result<ExportFormats> {
#[derive(Serialize)]
struct Input {
}
crate::call("export.formats", &Input { })
}
}
pub mod idea {
use super::*;
pub fn archive(id: &str) -> crate::Result<Idea> {
#[derive(Serialize)]
struct Input<'a> {
id: &'a str,
}
crate::call("idea.archive", &Input { id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct IdeaCreateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
}
pub fn create(content: &str, options: IdeaCreateOptions) -> crate::Result<Idea> {
#[derive(Serialize)]
struct Input<'a> {
content: &'a str,
#[serde(flatten)]
options: IdeaCreateOptions,
}
crate::call("idea.create", &Input { content, options })
}
pub fn delete(id: &str) -> crate::Result<Idea> {
#[derive(Serialize)]
struct Input<'a> {
id: &'a str,
}
crate::call("idea.delete", &Input { id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct IdeaListOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub archived: Option<bool>,
}
pub fn list(options: IdeaListOptions) -> crate::Result<Ideas> {
#[derive(Serialize)]
struct Input {
#[serde(flatten)]
options: IdeaListOptions,
}
crate::call("idea.list", &Input { options })
}
pub fn unarchive(id: &str) -> crate::Result<Idea> {
#[derive(Serialize)]
struct Input<'a> {
id: &'a str,
}
crate::call("idea.unarchive", &Input { id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct IdeaUpdateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
}
pub fn update(id: &str, content: &str, options: IdeaUpdateOptions) -> crate::Result<Idea> {
#[derive(Serialize)]
struct Input<'a> {
id: &'a str,
content: &'a str,
#[serde(flatten)]
options: IdeaUpdateOptions,
}
crate::call("idea.update", &Input { id, content, options })
}
}
pub mod note {
use super::*;
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct NoteCreateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
}
pub fn create(project: &str, content: &str, options: NoteCreateOptions) -> crate::Result<Note> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
content: &'a str,
#[serde(flatten)]
options: NoteCreateOptions,
}
crate::call("note.create", &Input { project, content, options })
}
pub fn delete(project: &str, id: i32) -> crate::Result<Note> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("note.delete", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct NoteListOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
pub fn list(project: &str, options: NoteListOptions) -> crate::Result<Notes> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(flatten)]
options: NoteListOptions,
}
crate::call("note.list", &Input { project, options })
}
pub fn read(project: &str, id: i32) -> crate::Result<Note> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("note.read", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct NoteUpdateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
}
pub fn update(project: &str, id: i32, content: &str, options: NoteUpdateOptions) -> crate::Result<Note> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
content: &'a str,
#[serde(flatten)]
options: NoteUpdateOptions,
}
crate::call("note.update", &Input { project, id, content, options })
}
}
pub mod ops {
use super::*;
pub fn list() -> crate::Result<OperationList> {
#[derive(Serialize)]
struct Input {
}
crate::call("ops.list", &Input { })
}
}
pub mod project {
use super::*;
pub fn create(name: &str) -> crate::Result<ProjectName> {
#[derive(Serialize)]
struct Input<'a> {
name: &'a str,
}
crate::call("project.create", &Input { name })
}
pub fn delete(project: &str) -> crate::Result<ProjectName> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
}
crate::call("project.delete", &Input { project })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct ProjectExportOptions {
#[serde(rename = "sceneIds")]
#[serde(skip_serializing_if = "Option::is_none")]
pub scene_ids: Option<Vec<i32>>,
#[serde(rename = "treatTopLevelAsChapters")]
#[serde(skip_serializing_if = "Option::is_none")]
pub treat_top_level_as_chapters: Option<bool>,
}
pub fn export(project: &str, format: &str, options: ProjectExportOptions) -> crate::Result<ExportedFile> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
format: &'a str,
#[serde(flatten)]
options: ProjectExportOptions,
}
crate::call("project.export", &Input { project, format, options })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct ProjectImportOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "markdownSplit")]
#[serde(skip_serializing_if = "Option::is_none")]
pub markdown_split: Option<MarkdownSplit>,
#[serde(rename = "rtfSplit")]
#[serde(skip_serializing_if = "Option::is_none")]
pub rtf_split: Option<RtfSplit>,
#[serde(rename = "chapterPattern")]
#[serde(skip_serializing_if = "Option::is_none")]
pub chapter_pattern: Option<String>,
#[serde(rename = "chapterGroups")]
#[serde(skip_serializing_if = "Option::is_none")]
pub chapter_groups: Option<bool>,
}
pub fn import(format: ImportFileFormat, content: &[u8], options: ProjectImportOptions) -> crate::Result<ProjectImported> {
#[derive(Serialize)]
struct Input<'a> {
format: ImportFileFormat,
#[serde(serialize_with = "crate::base64::serialize")]
content: &'a [u8],
#[serde(flatten)]
options: ProjectImportOptions,
}
crate::call("project.import", &Input { format, content, options })
}
pub fn info(project: &str) -> crate::Result<ProjectInfo> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
}
crate::call("project.info", &Input { project })
}
pub fn list() -> crate::Result<ProjectList> {
#[derive(Serialize)]
struct Input {
}
crate::call("project.list", &Input { })
}
pub fn rename(project: &str, name: &str) -> crate::Result<ProjectName> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
name: &'a str,
}
crate::call("project.rename", &Input { project, name })
}
}
pub mod scene {
use super::*;
pub fn append(project: &str, id: i32, markdown: &str) -> crate::Result<SceneWordCount> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
markdown: &'a str,
}
crate::call("scene.append", &Input { project, id, markdown })
}
pub fn archive(project: &str, id: i32) -> crate::Result<SceneItemRef> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("scene.archive", &Input { project, id })
}
pub fn archived(project: &str) -> crate::Result<ArchivedScenes> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
}
crate::call("scene.archived", &Input { project })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SceneCreateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<SceneKind>,
#[serde(rename = "parentId")]
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<i32>,
}
pub fn create(project: &str, name: &str, options: SceneCreateOptions) -> crate::Result<SceneItemRef> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
name: &'a str,
#[serde(flatten)]
options: SceneCreateOptions,
}
crate::call("scene.create", &Input { project, name, options })
}
pub fn delete(project: &str, id: i32) -> crate::Result<SceneItemRef> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("scene.delete", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SceneMoveOptions {
#[serde(rename = "parentId")]
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option<i32>,
}
pub fn r#move(project: &str, id: i32, index: i32, options: SceneMoveOptions) -> crate::Result<SceneItemRef> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
index: i32,
#[serde(flatten)]
options: SceneMoveOptions,
}
crate::call("scene.move", &Input { project, id, index, options })
}
pub fn read(project: &str, id: i32) -> crate::Result<SceneText> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("scene.read", &Input { project, id })
}
pub fn rename(project: &str, id: i32, name: &str) -> crate::Result<SceneItemRef> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
name: &'a str,
}
crate::call("scene.rename", &Input { project, id, name })
}
pub fn tree(project: &str) -> crate::Result<SceneTree> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
}
crate::call("scene.tree", &Input { project })
}
pub fn unarchive(project: &str, id: i32) -> crate::Result<SceneItemRef> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("scene.unarchive", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SceneWriteOptions {
#[serde(rename = "draftName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub draft_name: Option<String>,
}
pub fn write(project: &str, id: i32, mode: WriteMode, markdown: &str, options: SceneWriteOptions) -> crate::Result<SceneWriteResult> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
mode: WriteMode,
markdown: &'a str,
#[serde(flatten)]
options: SceneWriteOptions,
}
crate::call("scene.write", &Input { project, id, mode, markdown, options })
}
pub mod meta {
use super::*;
pub fn read(project: &str, id: i32) -> crate::Result<SceneMeta> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("scene.meta.read", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SceneMetaWriteOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub outline: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
}
pub fn write(project: &str, id: i32, options: SceneMetaWriteOptions) -> crate::Result<SceneMeta> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
#[serde(flatten)]
options: SceneMetaWriteOptions,
}
crate::call("scene.meta.write", &Input { project, id, options })
}
}
pub mod read {
use super::*;
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SceneReadManyOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub group: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ids: Option<Vec<i32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<i32>,
#[serde(rename = "maxWords")]
#[serde(skip_serializing_if = "Option::is_none")]
pub max_words: Option<i32>,
}
pub fn many(project: &str, options: SceneReadManyOptions) -> crate::Result<ScenePage> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(flatten)]
options: SceneReadManyOptions,
}
crate::call("scene.read.many", &Input { project, options })
}
}
pub mod references {
use super::*;
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SceneReferencesSetOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub confirm: Option<Vec<i32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dismiss: Option<Vec<i32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub clear: Option<Vec<i32>>,
}
pub fn set(project: &str, id: i32, options: SceneReferencesSetOptions) -> crate::Result<SceneMeta> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
#[serde(flatten)]
options: SceneReferencesSetOptions,
}
crate::call("scene.references.set", &Input { project, id, options })
}
}
}
pub mod stats {
use super::*;
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct StatsActivityOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
}
pub fn activity(project: &str, options: StatsActivityOptions) -> crate::Result<Activity> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(flatten)]
options: StatsActivityOptions,
}
crate::call("stats.activity", &Input { project, options })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct StatsProjectOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub recalculate: Option<bool>,
}
pub fn project(project: &str, options: StatsProjectOptions) -> crate::Result<ProjectStats> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(flatten)]
options: StatsProjectOptions,
}
crate::call("stats.project", &Input { project, options })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct StatsSessionsOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
}
pub fn sessions(project: &str, options: StatsSessionsOptions) -> crate::Result<Sessions> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(flatten)]
options: StatsSessionsOptions,
}
crate::call("stats.sessions", &Input { project, options })
}
}
pub mod sync {
use super::*;
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct SyncRunOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub project: Option<String>,
#[serde(rename = "onConflict")]
#[serde(skip_serializing_if = "Option::is_none")]
pub on_conflict: Option<ConflictChoice>,
}
pub fn run(options: SyncRunOptions) -> crate::Result<SyncRunResult> {
#[derive(Serialize)]
struct Input {
#[serde(flatten)]
options: SyncRunOptions,
}
crate::call("sync.run", &Input { options })
}
pub fn status() -> crate::Result<SyncStatus> {
#[derive(Serialize)]
struct Input {
}
crate::call("sync.status", &Input { })
}
}
pub mod tag {
use super::*;
pub fn find(project: &str, tag: &str) -> crate::Result<TaggedEntities> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
tag: &'a str,
}
crate::call("tag.find", &Input { project, tag })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct TagListOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<EntityKind>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
}
pub fn list(project: &str, options: TagListOptions) -> crate::Result<Tags> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
#[serde(flatten)]
options: TagListOptions,
}
crate::call("tag.list", &Input { project, options })
}
}
pub mod timeline {
use super::*;
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct TimelineCreateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<i32>,
}
pub fn create(project: &str, content: &str, options: TimelineCreateOptions) -> crate::Result<TimelineEntry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
content: &'a str,
#[serde(flatten)]
options: TimelineCreateOptions,
}
crate::call("timeline.create", &Input { project, content, options })
}
pub fn delete(project: &str, id: i32) -> crate::Result<TimelineEntry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("timeline.delete", &Input { project, id })
}
pub fn list(project: &str) -> crate::Result<Timeline> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
}
crate::call("timeline.list", &Input { project })
}
pub fn r#move(project: &str, id: i32, index: i32) -> crate::Result<TimelineEntry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
index: i32,
}
crate::call("timeline.move", &Input { project, id, index })
}
pub fn read(project: &str, id: i32) -> crate::Result<TimelineEntry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
}
crate::call("timeline.read", &Input { project, id })
}
#[derive(Debug, Clone, Default, PartialEq, Serialize)]
pub struct TimelineUpdateOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
}
pub fn update(project: &str, id: i32, content: &str, options: TimelineUpdateOptions) -> crate::Result<TimelineEntry> {
#[derive(Serialize)]
struct Input<'a> {
project: &'a str,
id: i32,
content: &'a str,
#[serde(flatten)]
options: TimelineUpdateOptions,
}
crate::call("timeline.update", &Input { project, id, content, options })
}
}