objectiveai 0.1.4

ObjectiveAI SDK, definitions, and utilities
Documentation
use base64::Engine;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(transparent)]
pub struct RetryToken(pub Vec<Option<String>>);

impl RetryToken {
    pub fn push(&mut self, other: RetryToken) {
        self.0.extend(other.0)
    }

    pub fn insert(&mut self, index: usize, other: RetryToken) {
        for (i, token) in other.0.into_iter().enumerate() {
            self.0[index + i] = token;
        }
    }

    pub fn to_string(&self) -> String {
        let json = serde_json::to_string(self).unwrap();
        base64::engine::general_purpose::STANDARD.encode(json)
    }

    pub fn try_from_string(s: &str) -> Option<Self> {
        let json = base64::engine::general_purpose::STANDARD.decode(s).ok()?;
        let token = serde_json::from_slice(&json).ok()?;
        Some(token)
    }
}