1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
use chrono::offset::Utc;
use chrono::DateTime;

/// Page.
#[derive(Debug)]
pub struct Page {
    /// The id of the page
    pub id: i64,
    /// The key of the space that this page belongs to
    pub space: String,
    /// The id of the parent page
    pub parent_id: i64,
    /// The title of the page
    pub title: String,
    /// The url to view this page online
    pub url: String,
    /// The version number of this page
    pub version: i32,
    /// The page content
    pub content: String,
    /// Timestamp page was created
    pub created: DateTime<Utc>,
    /// Username of the creator
    pub creator: String,
    /// Timestamp page was modified
    pub modified: DateTime<Utc>,
    /// Username of the page's last modifier
    pub modifier: String,
    /// Whether or not this page is the space's homepage
    pub home_page: bool,
    /// Status of the page (eg. current or deleted)
    pub content_status: String,
    /// Whether the page is current and not deleted
    pub current: bool,
}

/// Page Summary.
#[derive(Debug)]
pub struct PageSummary {
    /// The id of the page
    pub id: i64,
    /// The key of the space that this page belongs to
    pub space: String,
    /// The id of the parent page
    pub parent_id: i64,
    /// The title of the page
    pub title: String,
    /// The url to view this page online
    pub url: String,
}

/// Page Object for creating a Page.
#[derive(Debug)]
pub struct UpdatePage {
    /// The id of the page
    pub id: Option<i64>,
    /// The key of the space that this page belongs to
    pub space: String,
    /// The title of the page
    pub title: String,
    /// The page content
    pub content: String,
    /// The version number of this page
    pub version: Option<i32>,
    /// The id of the parent page
    pub parent_id: Option<i64>,
}

/// Options for updating the page.
#[derive(Debug)]
pub struct PageUpdateOptions {
    // Edit comment for the updated page
    pub version_comment: Option<String>,
    // Is this update a 'minor edit'? (default value: false)
    pub minor_edit: bool,
}

impl PageUpdateOptions {
    pub fn new_minor() -> PageUpdateOptions {
        PageUpdateOptions {
            version_comment: None,
            minor_edit: true,
        }
    }

    pub fn new_minor_with_comment<S: Into<String>>(comment: S) -> PageUpdateOptions {
        PageUpdateOptions {
            version_comment: Some(comment.into()),
            minor_edit: true,
        }
    }
}

impl UpdatePage {
    pub fn with_create_fields<S: Into<String>>(
        parent_id: Option<i64>,
        space: &str,
        title: &str,
        content: S,
    ) -> UpdatePage {
        UpdatePage {
            id: None,
            space: space.into(),
            title: title.into(),
            content: content.into(),
            version: None,
            parent_id,
        }
    }
}

impl From<Page> for UpdatePage {
    fn from(other: Page) -> UpdatePage {
        UpdatePage {
            id: Some(other.id),
            space: other.space,
            title: other.title,
            content: other.content,
            version: Some(other.version),
            parent_id: if other.parent_id == 0 {
                None
            } else {
                Some(other.parent_id)
            },
        }
    }
}