3#include "../data_interfaces/store/istore.hpp"
4#include "evaluation_error.hpp"
5#include "evaluation_stack.hpp"
7#include <launchdarkly/context.hpp>
8#include <launchdarkly/data_model/flag.hpp>
9#include <launchdarkly/data_model/segment.hpp>
11#include <tl/expected.hpp>
15namespace launchdarkly::server_side::evaluation {
17[[nodiscard]] tl::expected<bool, Error> Match(
18 data_model::Flag::Rule
const&,
20 data_interfaces::IStore
const& store,
21 EvaluationStack& stack);
23[[nodiscard]] tl::expected<bool, Error> Match(data_model::Clause
const&,
25 data_interfaces::IStore
const&,
28[[nodiscard]] tl::expected<bool, Error> Match(
29 data_model::Segment::Rule
const& rule,
30 Context
const& context,
31 data_interfaces::IStore
const& store,
32 EvaluationStack& stack,
33 std::string
const& key,
34 std::string
const& salt);
36[[nodiscard]] tl::expected<bool, Error> MatchSegment(
37 data_model::Clause
const&,
39 data_interfaces::IStore
const&,
40 EvaluationStack& stack);
42[[nodiscard]] tl::expected<bool, Error> MatchNonSegment(
43 data_model::Clause
const&,
46[[nodiscard]] tl::expected<bool, Error> Contains(
47 data_model::Segment
const&,
49 data_interfaces::IStore
const& store,
50 EvaluationStack& stack);
52[[nodiscard]]
bool MaybeNegate(data_model::Clause
const& clause,
bool value);
54[[nodiscard]]
bool IsTargeted(Context
const&,
55 std::vector<std::string>
const&,
56 std::vector<data_model::Segment::Target>
const&);
58[[nodiscard]]
bool IsUser(Context
const& context);