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
get_from_js!(active_segments -> { Object.keys(RawMemory.segments) } -> Vec<i32>);
get_from_js!(get_segment(id: i32) -> { RawMemory.segments[@{id}] } -> Option<String>);
pub fn set_segment(id: i32, data: &str) {
    js! {
        RawMemory.segments[@{id}] = @{data};
    }
}
get_from_js!(foreign_segment_username -> {
    RawMemory.forignSegment && RawMemory.forignSegment.username
} -> Option<String>);
get_from_js!(foreign_segment_id -> {
    RawMemory.forignSegment && RawMemory.forignSegment.id
} -> Option<i32>);
get_from_js!(foreign_segment_data -> {
    RawMemory.forignSegment && RawMemory.forignSegment.data
} -> Option<String>);

/// Sets active segments (max 10 ids).
pub fn set_active_segments(ids: &[i32]) {
    assert!(
        ids.len() <= 10,
        "can't set more than 10 active segments at a time"
    );
    js! {
        RawMemory.setActiveSegments(@{ids});
    }
}

pub fn set_active_foreign_segment(username: &str, id: Option<i32>) {
    match id {
        Some(id) => js! { RawMemory.setActiveForeignSegment(@{username}, @{id}); },
        None => js! { RawMemory.setActiveForeignSegment(@{username}); },
    };
}

pub fn set_default_public_segment(id: i32) {
    js! {
        RawMemory.setDefaultPublicSegment(@{id});
    }
}

pub fn set_public_segments(ids: &[i32]) {
    js! {
        RawMemory.setPublicSegments(@{ids});
    }
}