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}