On 12/10/15 4:13 PM, holo wrote:

By the looks, I'm guessing you do not have much experience when it
comes to OOP.

I think you are wanting something a bit closer to:

import std.typecons : tuple, TypeTuple;

interface Credential {
    string encode(....);
}

class SigV4 : Credential {
    this(....) {
        ....
    }

    string encode(....) {

    }

    private:
    ....
}


TypeTuple!(string, string) AWSKeys() {
    import std.process;
    return tuple(environment.get("AWS_ACCESS_KEY"),
environment.get("AWS_SECRET_KEY"));
}

Yes you guessed good, i don't have any experience with OOP (i have some
experience with C - simple AVR projects and tons of bash scripts) this
is my first such kind of language which I'm trying to learn. For
beginning I'm trying  to avoid advanced things like templates or from
your example touples (Touples looks for me like some kind of array but
every cell can be different type, am i right? Eg tuple from your example
is that same what string[2] var?) i was reading about it but for now i
can't understand what they are and for what they are useful.

Templates are just compile time arguments :) Mostly used for types and constants. Simple concept, just don't get too scared off by what is possible with template if's.

Tuples are pretty simple. It's basically just a struct. They are not arrays. But they do have a similar behavior. With opIndex overloading.
You could for example use:

struct AWSKeys {
    string access, secret;

    static AWSKeys get() {
        import std.process : environment;
return AWSKeys(environment.get("AWS_ACCESS_KEY"), environment.get("AWS_SECRET_KEY"));
    }
}

Instead of that free function and tuples.

I'm trying to learn on the examples and honestly i'm not understand how
that TypeTuple is resolving my problem with default values for classes?

It wasn't meant to, I got started rewriting the example code you gave, and ehh gave up after the basics of the class/interface.

Second thing that interfaces, are they needed? Without it you can write
same function just compilator wont be screaming for it lack.

An interface basically says, this object adheres to these methods.
When dealing with possibly changing authentication/communication protocols you would have the interface being how you get what to send, but the actual implementation being whatever you want to be using.

Keep in mind, this class which handles creating the messages to the remote api's is not per message sent. It is a global communication mechanism. If you didn't need to make it easily changeable I would say not even bother with OOP at all.

I would recommend coming on to #d on Freenode, we can help you better there.

Reply via email to