///
/// NitroKryptomAutolinking.mm
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © 2025 Marc Rousavy @ Margelo
///

#import <Foundation/Foundation.h>
#import <NitroModules/HybridObjectRegistry.hpp>

#import <type_traits>

#include "HybridAes.hpp"
#include "HybridDigest.hpp"
#include "HybridHmac.hpp"
#include "HybridRsa.hpp"
#include "HybridStrongRandom.hpp"

@interface NitroKryptomAutolinking : NSObject
@end

@implementation NitroKryptomAutolinking

+ (void) load {
  using namespace margelo::nitro;
  using namespace margelo::nitro::nitrokryptom;

  HybridObjectRegistry::registerHybridObjectConstructor(
    "Aes",
    []() -> std::shared_ptr<HybridObject> {
      static_assert(std::is_default_constructible_v<HybridAes>,
                    "The HybridObject \"HybridAes\" is not default-constructible! "
                    "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
      return std::make_shared<HybridAes>();
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "Digest",
    []() -> std::shared_ptr<HybridObject> {
      static_assert(std::is_default_constructible_v<HybridDigest>,
                    "The HybridObject \"HybridDigest\" is not default-constructible! "
                    "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
      return std::make_shared<HybridDigest>();
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "Hmac",
    []() -> std::shared_ptr<HybridObject> {
      static_assert(std::is_default_constructible_v<HybridHmac>,
                    "The HybridObject \"HybridHmac\" is not default-constructible! "
                    "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
      return std::make_shared<HybridHmac>();
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "Rsa",
    []() -> std::shared_ptr<HybridObject> {
      static_assert(std::is_default_constructible_v<HybridRsa>,
                    "The HybridObject \"HybridRsa\" is not default-constructible! "
                    "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
      return std::make_shared<HybridRsa>();
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "StrongRandom",
    []() -> std::shared_ptr<HybridObject> {
      static_assert(std::is_default_constructible_v<HybridStrongRandom>,
                    "The HybridObject \"HybridStrongRandom\" is not default-constructible! "
                    "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
      return std::make_shared<HybridStrongRandom>();
    }
  );
}

@end
