refluxer 0.2.0

Rust API wrapper for Fluxer
Documentation
mod common;
use common::{setup, start_gateway_session};
use refluxer::http::endpoints::guilds::CreateGuildChannel;
use refluxer::http::endpoints::webhooks::{CreateWebhook, ExecuteWebhook, ModifyWebhook};

#[tokio::test]
async fn test_webhook_crud_and_execute() {
    let (http, guild_id) = setup();
    let _gw = start_gateway_session().await;

    let channel = http
        .create_guild_channel(
            guild_id,
            &CreateGuildChannel::text("refluxer-test-webhooks"),
        )
        .await
        .expect("create channel failed");

    match http
        .create_webhook(channel.id, &CreateWebhook::new("refluxer-test-hook"))
        .await
    {
        Ok(webhook) => {
            assert_eq!(webhook.name.as_deref(), Some("refluxer-test-hook"));
            println!(
                "Created webhook: {} (id: {})",
                webhook.name.as_deref().unwrap_or("?"),
                webhook.id
            );

            let hooks = http
                .get_channel_webhooks(channel.id)
                .await
                .expect("get_channel_webhooks failed");
            assert!(hooks.iter().any(|h| h.id == webhook.id));

            let guild_hooks = http
                .get_guild_webhooks(guild_id)
                .await
                .expect("get_guild_webhooks failed");
            assert!(guild_hooks.iter().any(|h| h.id == webhook.id));

            let fetched = http
                .get_webhook(&webhook.id)
                .await
                .expect("get_webhook failed");
            assert_eq!(fetched.id, webhook.id);

            let modified = http
                .modify_webhook(
                    &webhook.id,
                    &ModifyWebhook::new().name("refluxer-renamed-hook"),
                )
                .await
                .expect("modify_webhook failed");
            assert_eq!(modified.name.as_deref(), Some("refluxer-renamed-hook"));

            if let Some(token) = &webhook.token {
                let _ = http
                    .execute_webhook(
                        &webhook.id,
                        token,
                        &ExecuteWebhook::new()
                            .content("Hello from webhook!")
                            .username("Refluxer Test"),
                    )
                    .await;
                println!("Webhook executed");
            }

            http.delete_webhook(&webhook.id)
                .await
                .expect("delete_webhook failed");

            println!("Webhook CRUD tests passed");
        }
        Err(refluxer::error::HttpError::Api { status: 403, .. }) => {
            println!("Bot lacks MANAGE_WEBHOOKS permission — skipping");
        }
        Err(e) => panic!("unexpected error: {e}"),
    }

    http.delete_channel(channel.id)
        .await
        .expect("cleanup channel failed");
}