Skip to main content

flowly_flv/tag/
meta.rs

1use std::collections::HashMap;
2
3use bytes::Bytes;
4
5/// The tag data part of `script` FLV tag, including `name` and `value`.
6/// The `name` is a `ScriptDataValue` enum whose type is `String`.
7/// The `value` is a `ScriptDataValue` enum whose type is `ECMAArray`.
8#[derive(Clone, Debug, PartialEq)]
9pub struct MetaTag {
10    /// Method or object name.
11    /// ScriptTagValue.Type = 2 (String)
12    pub name: Bytes,
13
14    /// AMF arguments or object properties.
15    /// ScriptTagValue.Type = 8 (ECMAArray)
16    pub value: MetaDataValue,
17}
18
19/// The `ScriptDataValue` enum.
20#[derive(Debug, Clone, PartialEq)]
21pub enum MetaDataValue {
22    /// 0, Number value.
23    Number(f64),
24
25    /// 1, Boolean value.
26    Boolean(bool),
27
28    /// 2, String value.
29    String(Bytes),
30
31    /// 3, Object value.
32    Object(HashMap<Bytes, MetaDataValue>),
33
34    /// 4, MovieClip value.
35    MovieClip,
36
37    /// 5, Null value.
38    Null,
39
40    /// 6, Undefined value.
41    Undefined,
42
43    /// 7, Reference value.
44    Reference(u16),
45
46    /// 8, ECMA Array value.
47    ECMAArray(HashMap<Bytes, MetaDataValue>),
48
49    /// 10, Strict Array value.
50    StrictArray(Vec<MetaDataValue>),
51
52    /// 11, Date value.
53    Date(MetaDataDate),
54
55    /// 12, Long String value.
56    LongString(Bytes),
57
58    Unknown(u8),
59}
60
61/// The `ScriptDataObjectProperty` is the component of `Object` and `ECMAArray`,
62/// which are a kind of `ScriptDataValue`.
63#[derive(Clone, Debug, PartialEq)]
64pub struct MetaDataObjectProperty {
65    /// Object property name.
66    pub key: Bytes,
67
68    /// Object property value.
69    pub value: MetaDataValue,
70}
71
72/// The `ScriptDataDate` is a kind of `ScriptDataValue`.
73#[derive(Copy, Clone, Debug, PartialEq)]
74pub struct MetaDataDate {
75    /// Number of milliseconds since UNIX_EPOCH.
76    // SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_millis()
77    pub date_time: f64,
78
79    /// Local time offset in minutes from UTC.
80    /// For time zones located west of Greenwich, this value is a negative number.
81    /// Time zones east of Greenwich are positive.
82    pub local_date_time_offset: i16,
83}