![]() I noticed that stopping the Lemmy process with ctrl+c wasnt working because the activity channel isnt properly closed. This is now fixed. Later we should also move the channel from static into LemmyContext, Im not doing that now to avoid conflicts with #3670. |
||
---|---|---|
.. | ||
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.