patreon 0.2.1

Patreon client
Documentation
use hmac::{Hmac, Mac};
use patreon::{WebhookValidator, webhook::WebhookEventType};
use sha2::Sha256;

type HmacSha256 = Hmac<Sha256>;

fn compute_signature(secret: &str, body: &[u8]) -> String {
    let mut mac = HmacSha256::new_from_slice(secret.as_bytes()).expect("HMAC key");
    mac.update(body);
    let result = mac.finalize();
    hex::encode(result.into_bytes())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let secret = "example_webhook_secret";
    let validator = WebhookValidator::new(secret);

    let payload = r#"{
  "data": { "type": "member", "id": "123" },
  "links": { "self": "https://www.patreon.com/api/oauth2/v2/members/123" }
}"#;
    let payload_bytes = payload.as_bytes();

    let signature = compute_signature(secret, payload_bytes);
    assert!(validator.validate(payload_bytes, &signature));
    validator.validate_or_error(payload_bytes, &signature)?;

    let event = validator.parse_event(payload)?;
    println!("parsed_event.data: {}", event.data);

    let event2 = validator.validate_and_parse(payload_bytes, &signature)?;
    println!("validate_and_parse.data: {}", event2.data);

    let t = WebhookEventType::from_str("members:create");
    println!("WebhookEventType::from_str: {}", t.as_str());

    Ok(())
}