claude-code-client-sdk 0.1.46

Rust SDK for integrating Claude Code as a subprocess with typed APIs
Documentation
use claude_code::{ClaudeAgentOptions, PermissionMode, SettingSource};
use serde_json::json;

#[test]
fn test_setting_source_serialization() {
    let sources = vec![
        SettingSource::User,
        SettingSource::Project,
        SettingSource::Local,
    ];

    let serialized = serde_json::to_value(&sources).expect("serialize");
    assert_eq!(serialized, json!(["user", "project", "local"]));
}

#[test]
fn test_setting_source_deserialization() {
    let json = json!(["user", "project"]);
    let sources: Vec<SettingSource> = serde_json::from_value(json).expect("deserialize");
    assert_eq!(sources.len(), 2);
    assert_eq!(sources[0], SettingSource::User);
    assert_eq!(sources[1], SettingSource::Project);
}

#[test]
fn test_options_default_has_no_setting_sources() {
    let options = ClaudeAgentOptions::default();
    assert!(options.setting_sources.is_none());
}

#[test]
fn test_options_with_setting_sources() {
    let options = ClaudeAgentOptions {
        setting_sources: Some(vec![SettingSource::User, SettingSource::Project]),
        ..Default::default()
    };

    let sources = options.setting_sources.as_ref().expect("has sources");
    assert_eq!(sources.len(), 2);
    assert!(sources.contains(&SettingSource::User));
    assert!(sources.contains(&SettingSource::Project));
}

#[test]
fn test_permission_mode_serialization_roundtrip() {
    let modes = vec![
        (PermissionMode::Default, "default"),
        (PermissionMode::AcceptEdits, "acceptEdits"),
        (PermissionMode::Plan, "plan"),
        (PermissionMode::BypassPermissions, "bypassPermissions"),
    ];

    for (mode, expected_str) in modes {
        let serialized = serde_json::to_value(&mode).expect("serialize");
        assert_eq!(serialized, json!(expected_str));

        let deserialized: PermissionMode = serde_json::from_value(serialized).expect("deserialize");
        assert_eq!(deserialized, mode);
    }
}

#[test]
fn test_permission_mode_in_options() {
    let options = ClaudeAgentOptions {
        permission_mode: Some(PermissionMode::BypassPermissions),
        ..Default::default()
    };

    assert_eq!(
        options.permission_mode,
        Some(PermissionMode::BypassPermissions)
    );
}