summaryrefslogtreecommitdiff
path: root/src/mbgl/style/conversion/light.cpp
blob: f521f7438686c27e707ab4c50cece7107db91726 (plain)
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <mbgl/style/conversion/light.hpp>
#include <mbgl/style/conversion/position.hpp>
#include <mbgl/style/conversion/property_value.hpp>
#include <mbgl/style/conversion/transition_options.hpp>

namespace mbgl {
namespace style {
namespace conversion {

optional<Light> Converter<Light>::operator()(const Convertible& value, Error& error) const {
    if (!isObject(value)) {
        error = { "light must be an object" };
        return {};
    }

    Light light;

    const auto anchor = objectMember(value, "anchor");
    if (anchor) {
        optional<PropertyValue<LightAnchorType>> convertedAnchor =
            convert<PropertyValue<LightAnchorType>>(*anchor, error);

        if (convertedAnchor) {
            light.setAnchor(*convertedAnchor);
        } else {
            return {};
        }
    }

    const auto anchorTransition = objectMember(value, "anchor-transition");
    if (anchorTransition) {
        optional<TransitionOptions> transition =
            convert<TransitionOptions>(*anchorTransition, error);
        if (transition) {
            light.setAnchorTransition(*transition);
        } else {
            return {};
        }
    }

    const auto color = objectMember(value, "color");
    if (color) {
        optional<PropertyValue<Color>> convertedColor =
            convert<PropertyValue<Color>>(*color, error);

        if (convertedColor) {
            light.setColor(*convertedColor);
        } else {
            return {};
        }
    }

    const auto colorTransition = objectMember(value, "color-transition");
    if (colorTransition) {
        optional<TransitionOptions> transition =
            convert<TransitionOptions>(*colorTransition, error);
        if (transition) {
            light.setColorTransition(*transition);
        } else {
            return {};
        }
    }

    const auto position = objectMember(value, "position");
    if (position) {
        optional<PropertyValue<Position>> convertedPosition =
            convert<PropertyValue<Position>>(*position, error);

        if (convertedPosition) {
            light.setPosition(*convertedPosition);
        } else {
            return {};
        }
    }

    const auto positionTransition = objectMember(value, "position-transition");
    if (positionTransition) {
        optional<TransitionOptions> transition =
            convert<TransitionOptions>(*positionTransition, error);
        if (transition) {
            light.setPositionTransition(*transition);
        } else {
            return {};
        }
    }

    const auto intensity = objectMember(value, "intensity");
    if (intensity) {
        optional<PropertyValue<float>> convertedIntensity =
            convert<PropertyValue<float>>(*intensity, error);

        if (convertedIntensity) {
            light.setIntensity(*convertedIntensity);
        } else {
            return {};
        }
    }

    const auto intensityTransition = objectMember(value, "intensity-transition");
    if (intensityTransition) {
        optional<TransitionOptions> transition =
            convert<TransitionOptions>(*intensityTransition, error);
        if (transition) {
            light.setIntensityTransition(*transition);
        } else {
            return {};
        }
    }

    return { std::move(light) };
}

} // namespace conversion
} // namespace style
} // namespace mbgl