aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2023-03-27 22:14:15 +0200
committerHarald Eilertsen <haraldei@anduin.net>2023-03-27 22:14:15 +0200
commitfe9db878e8f7d8f4bff2a51bb49b66ff84013644 (patch)
tree60d040e1f61d5c00e86389578b15a536a212aa43 /src
parent93ee81f05e1cb90c79949d5c57b1d7e3c272dd02 (diff)
downloadrust-zotapi-fe9db878e8f7d8f4bff2a51bb49b66ff84013644.tar.gz
rust-zotapi-fe9db878e8f7d8f4bff2a51bb49b66ff84013644.tar.bz2
rust-zotapi-fe9db878e8f7d8f4bff2a51bb49b66ff84013644.zip
Add ZotAPI trait and derive macro.
The idea is to try to generate more of the boilerplate code, but for now we only do the `z()` method definition. There are also some we're not quite able to replace yet (like XChanRequest) since it also has life times. It's a start anyways :)
Diffstat (limited to 'src')
-rw-r--r--src/abconfig.rs11
-rw-r--r--src/abook.rs11
-rw-r--r--src/bin/zot/main.rs1
-rw-r--r--src/bin/zot/zot/abconfig.rs2
-rw-r--r--src/lib.rs2
-rw-r--r--src/verify.rs11
-rw-r--r--src/zotapi.rs5
7 files changed, 18 insertions, 25 deletions
diff --git a/src/abconfig.rs b/src/abconfig.rs
index ebb7e2b..8904ca3 100644
--- a/src/abconfig.rs
+++ b/src/abconfig.rs
@@ -14,13 +14,14 @@
// 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 crate::{client::Client, error::Error};
+use crate::{client::Client, error::Error, ZotAPI};
use serde::Deserialize;
+use zotapi_derive::ZotAPI;
/// A struct for storing a key value pair with a category in
/// relation to a contact. Typically used to store permissions
/// a given contact has on a given channel.
-#[derive(Debug, Default, Deserialize)]
+#[derive(Debug, Default, Deserialize, ZotAPI)]
pub struct ABConfig {
/// Database ID for this entry
pub id: u32,
@@ -41,12 +42,6 @@ pub struct ABConfig {
pub v: String,
}
-impl ABConfig {
- pub fn z() -> ABConfigRequest {
- ABConfigRequest::default()
- }
-}
-
#[derive(Default)]
pub struct ABConfigRequest {
abook_id: Option<u32>,
diff --git a/src/abook.rs b/src/abook.rs
index d7d38cd..c7ceeb1 100644
--- a/src/abook.rs
+++ b/src/abook.rs
@@ -14,11 +14,12 @@
// 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 crate::{client::Client, error::Error, XChan};
+use crate::{client::Client, error::Error, XChan, ZotAPI};
use serde::Deserialize;
use std::convert::TryFrom;
+use zotapi_derive::ZotAPI;
-#[derive(Debug, Default, Deserialize)]
+#[derive(Debug, Default, Deserialize, ZotAPI)]
pub struct Abook {
#[serde(rename = "abook_id")]
pub id: u32,
@@ -105,12 +106,6 @@ pub struct Abook {
}
-impl Abook {
- pub fn z() -> AbookRequest {
- AbookRequest::default()
- }
-}
-
impl<'a> TryFrom<&'a str> for Abook {
type Error = Error;
diff --git a/src/bin/zot/main.rs b/src/bin/zot/main.rs
index 70a7984..bf7b9b8 100644
--- a/src/bin/zot/main.rs
+++ b/src/bin/zot/main.rs
@@ -19,6 +19,7 @@ use clap::{clap_app, crate_authors, crate_version};
use dotenv::dotenv;
use std::env;
use std::str::FromStr;
+use zotapi::ZotAPI;
mod zot;
diff --git a/src/bin/zot/zot/abconfig.rs b/src/bin/zot/zot/abconfig.rs
index 14875c8..1d67a54 100644
--- a/src/bin/zot/zot/abconfig.rs
+++ b/src/bin/zot/zot/abconfig.rs
@@ -15,7 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-use zotapi;
+use zotapi::{self, ZotAPI};
pub async fn fetch(client: &zotapi::Client) {
match zotapi::ABConfig::z().fetch(&client).await {
diff --git a/src/lib.rs b/src/lib.rs
index 11ca297..086ecfb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -24,6 +24,7 @@ mod item;
mod network_stream;
mod verify;
mod xchan;
+mod zotapi;
pub use abconfig::ABConfig;
pub use abook::Abook;
@@ -35,6 +36,7 @@ pub use item::item;
pub use network_stream::network_stream;
pub use verify::Channel;
pub use xchan::XChan;
+pub use zotapi::ZotAPI;
#[cfg(test)]
mod tests {
diff --git a/src/verify.rs b/src/verify.rs
index 8edb2f1..57e250d 100644
--- a/src/verify.rs
+++ b/src/verify.rs
@@ -14,11 +14,12 @@
// 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 crate::{client::Client, error::Error, XChan};
+use crate::{client::Client, error::Error, XChan, ZotAPI};
use serde::Deserialize;
use std::convert::TryFrom;
+use zotapi_derive::ZotAPI;
-#[derive(Deserialize, Debug)]
+#[derive(Deserialize, Debug, ZotAPI)]
pub struct Channel {
#[serde(alias = "channel_id")]
pub id: u32,
@@ -129,12 +130,6 @@ pub struct Channel {
pub xchan: XChan,
}
-impl Channel {
- pub fn z() -> ChannelRequest {
- ChannelRequest::default()
- }
-}
-
impl<'a> TryFrom<&'a str> for Channel {
type Error = Error;
diff --git a/src/zotapi.rs b/src/zotapi.rs
new file mode 100644
index 0000000..42d8cde
--- /dev/null
+++ b/src/zotapi.rs
@@ -0,0 +1,5 @@
+pub trait ZotAPI<T: Default> {
+ fn z() -> T {
+ T::default()
+ }
+}