SYNOPSIS

    use DNS::Hetzner;

    my $api_key = '1234abc';
    my $dns     = DNS::Hetzner->new(
        token => $api_key,
    );

    $dns->records->create(
    );

ATTRIBUTES

  • endpoint

METHODS

%s ~, $methods_pod;

    my $code = sprintf q~package DNS::Hetzner::API::%s;

# ABSTRACT: %s

# --- # This class is auto-generated by bin/get_hetzner_info.pl # ---

use v5.20;

use Moo; use Types::Standard qw(:all);

use Mojo::Base -strict, -signatures;

extends 'DNS::Hetzner';

with 'DNS::Hetzner::Utils'; with 'MooX::Singleton';

use JSON::Validator; use Carp;

has endpoint => ( is => 'ro', isa => Str, default => sub { '%s' } ); %s

1;

__END__

%s ~, $class, $class, $endpoint, $subs, $pod;

    return $code;
}

sub _get_params ( $class, $method_def, $components ) { my %params; my @required; my %components;

    PARAM:
    for my $param ( $method_def->{parameters}->@* ) {
        next PARAM if $param->{in} eq 'query';

        my $name = $param->{name};
        $params{$name} = $param->{schema};

        if ( $param->{required} ) {
            push @required, $name;
        }
    }

    if ( ($method_def->{requestBody} // {} )->%* ) {
        my $sub_def = $method_def->{requestBody};
        my $type    = $sub_def->{content};
        my $name    = "";

        if ( $type->{"text/plain"} ) {
            $params{""} = { type => "string" };
        }

        if ( $type->{"application/json"} ) {
            my $component_check = $class =~ s{s\z}{}r;
            my %subcomponents = map {
                ( $_ => $components->{schemas}->{$_} );
            } grep {
                $_ =~ m{$component_check};
            } keys $components->{schemas}->%*;

            %components = ( components => \%subcomponents );
            $params{""} = $type->{"application/json"};
        }

        if ( $sub_def->{description} ) {
            $params{$name}->{description} = $sub_def->{description};
        }

        if ( $sub_def->{required} ) {
            push @required, $name;
        }
    }

    my %data = (
        type       => "object",
        properties => \%params,
        required   => \@required,
        %components,
    );

    return \%data;
}

sub _get_sub ( $method, $parts, $uri, $params ) { my $method_name = $method;

    $method_name = 'create' if $method eq 'post';
    $method_name = 'update' if $method eq 'put';

    if ( $method eq 'get' && $uri !~ m/:/ ) {
        $method_name = 'list';
    }

    if ( $parts->@* && $parts->[-1] !~ m/\{/ ) {
        $method_name .= '_' . $parts->[-1];
    }

    my $spec = Dumper($params);
    $spec    =~ s{\$VAR1 = }{};
    $spec    =~ s{^}{    }xmsg;

    my $sub = sprintf q~
sub %s ($self, $params = {}) {
    my $spec   = %s
    my $validator = JSON::Validator->new->schema($spec);

    my @errors = $validator->validate(
        $params,
    );

    if ( @errors ) {
        croak 'invalid parameters';
    }

    my %%request_params = map{
        exists $params->{$_} ?
            ($_ => $params->{$_}) :
            ();
    } keys %%{$spec->{properties}};

    $self->request(
        '%s',
        { type => '%s' },
        \%%request_params,
    );
}
~, $method_name, $spec, $uri, $method;

    return ($sub, $method_name);
}

sub _get_pod ( $method, $description, $object, $params) { my $pod = sprintf q~

%s

%s

    $dns->%s->%s(%s);
~,
        $method, $description, $object, $method, $params;

    return $pod;
}

__END__

NAME

get_hcloud_info.pl - get API definitions from docs.hetzner.cloud

VERSION

version 0.01

AUTHOR

Renee Baecker <reneeb@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2020 by Renee Baecker.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)