/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include #include #include namespace facebook { namespace xplat { namespace samples { // In a less contrived example, Sample would be part of a traditional // C++ library. class Sample { public: std::string hello(); double add(double a, double b); std::string concat(const std::string &a, const std::string &b); std::string repeat(int count, const std::string &str); void save(std::map dict); std::map load(); void call_later(int msec, std::function f); void except(); double twice(double n); private: std::map state_; }; class SampleCxxModule : public module::CxxModule { public: SampleCxxModule(std::unique_ptr sample); std::string getName(); virtual auto getConstants() -> std::map; virtual auto getMethods() -> std::vector; private: void save(folly::dynamic args); void load(folly::dynamic args, Callback cb); std::unique_ptr sample_; }; } // namespace samples } // namespace xplat } // namespace facebook extern "C" facebook::xplat::module::CxxModule *SampleCxxModule();