5d23ef960e
* Remove SendActivity and Perform traits, rely on channel These traits arent necessary anymore now that websocket is removed. Removing them allows us to use normal actix http handler methods which are much more flexible, and allow using different middlewares as well as setting response attributes. * compiling and create post federating * clippy * rename methods, join outgoing activities task * fix api tests * no unwrap * conditional compile * add back getrandom * make crates optional * fmt |
||
---|---|---|
.. | ||
src | ||
Cargo.toml | ||
README.md |
lemmy_api_common
This crate provides all the data types which are necessary to build a client for Lemmy. You can use them with the HTTP client of your choice.
Here is an example using reqwest:
let params = GetPosts {
community_name: Some("asklemmy".to_string()),
..Default::default()
};
let client = Client::new();
let response = client
.get("https://lemmy.ml/api/v3/post/list")
.query(¶ms)
.send()
.await?;
let json = response.json::<GetPostsResponse>().await.unwrap();
print!("{:?}", &json);
As you can see, each API endpoint needs a parameter type ( GetPosts), path (/post/list) and response type (GetPostsResponse). You can find the paths and parameter types from this file. For the response types you need to look through the crates lemmy_api and lemmy_api_crud for the place where Perform/PerformCrud is implemented for the parameter type. The response type is specified as a type parameter on the trait.
For a real example of a Lemmy API client, look at lemmyBB.
Lemmy also provides a websocket API. You can find the full websocket code in this file.
Generate TypeScript bindings
TypeScript bindings (API types) can be generated by running cargo test --features full
.
The ts files be generated into a bindings
folder.
This crate uses ts_rs
macros derive(TS)
and ts(export)
to attribute types for binding generating.