rustube 0.6.0

A YouTube video downloader, originally inspired by pytube, written in Rust.
Documentation
use chrono::{DateTime, TimeZone, Utc};
use serde::{Deserializer, Serializer};
use serde::de::{Error, Unexpected};
use serde_with::{DeserializeAs, SerializeAs};
use serde_with::json::JsonString;

pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<Utc>, <D as Deserializer<'de>>::Error> where
    D: Deserializer<'de> {
    let seconds: i64 = JsonString::deserialize_as(deserializer)?;
    Utc
        .timestamp_opt(seconds, 0)
        .single()
        .ok_or_else(|| D::Error::invalid_value(
            Unexpected::Signed(seconds),
            &"a valid UNIX time stamp in microseconds",
        ))
}

pub(crate) fn serialize<S>(time: &DateTime<Utc>, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer {
    let seconds: i64 = time.timestamp() * 1000;
    JsonString::serialize_as(&seconds, serializer)
}