logo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use bytes::Bytes;
use std::future::Future;

pub struct NetworkAssetBundle {}

impl NetworkAssetBundle {
    // Creates a network asset bundle that resolves asset keys as URLs relative to the given base URL.
    // pub fn new(base_url: Uri) -> Self {
    pub fn new(base_url: String) -> Self {
        todo!()
    }
}

impl AssetBundle for NetworkAssetBundle {
    fn clear(&self) {
        todo!()
    }

    fn evict(&self, key: String) {
        todo!()
    }

    fn load(&self, key: String) -> Box<dyn Future<Output = Bytes>> {
        todo!()
    }

    fn load_string(
        &self,
        key: String,
        cache: bool, /*= true*/
    ) -> Box<dyn Future<Output = String>> {
        todo!()
    }
}

pub struct PlatformAssetBundle {}

impl CachingAssetBundle for PlatformAssetBundle {}

impl AssetBundle for PlatformAssetBundle {
    fn clear(&self) {
        todo!()
    }

    fn evict(&self, key: String) {
        todo!()
    }

    fn load(&self, key: String) -> Box<dyn Future<Output = Bytes>> {
        todo!()
    }

    fn load_string(
        &self,
        key: String,
        cache: bool, /*= true*/
    ) -> Box<dyn Future<Output = String>> {
        todo!()
    }
}

pub trait CachingAssetBundle: AssetBundle {}

pub trait AssetBundle {
    // If this is a caching asset bundle, clear all cached data.
    fn clear(&self);

    // If this is a caching asset bundle, and the given key describes a cached asset,
    // then evict the asset from the cache so that the next time it is loaded, the cache will be reread from the asset bundle.
    fn evict(&self, key: String);

    // Retrieve a binary resource from the asset bundle as a data stream.
    fn load(&self, key: String) -> Box<dyn Future<Output = Bytes>>;

    // Retrieve a string from the asset bundle.
    fn load_string(
        &self,
        key: String,
        cache: bool, /*= true*/
    ) -> Box<dyn Future<Output = String>>;

    // // Retrieve a string from the asset bundle, parse it with the given function, and return the function's result.
    // fn load_structured_data<T>(
    //     &self,
    //     key: String,
    //     parser: Box<dyn Fn(String) -> Box<dyn Future<Output = T>>>,
    // ) -> Box<dyn Future<Output = T>>;
}

// impl<T: Default> Default for AssetBundle {
//     fn default() -> Self {
//         Self
//     }
// }