Thread overview
How about a new property for class and struct to get the fully qualified name?
Jul 17, 2020
Heromyth
Jul 17, 2020
rikki cattermole
Jul 17, 2020
Per Nordlöw
Jul 17, 2020
Stefan Koch
Jul 17, 2020
Meta
Jul 17, 2020
Stefan Koch
July 17, 2020
How about a new property for class and struct like `.stringof` to get the fully qualified name?

I know the `fullyQualifiedName` can do this. If a new property like `.qualifiedName` added to class and struct, the code blown:

    @Middleware(fullyQualifiedName!(IpFilterMiddleware), fullyQualifiedName!(BasicAuthMiddleware))
    @Action string security() {
        return "It's a security page.";
    }

may be changed as:

    @Middleware(IpFilterMiddleware.qualifiedName, BasicAuthMiddleware.qualifiedName)
    @Action string security() {
        return "It's a security page.";
    }

It looks better, does it?
July 17, 2020
On 17/07/2020 2:44 PM, Heromyth wrote:
> @Middleware(fullyQualifiedName!(IpFilterMiddleware), fullyQualifiedName!(BasicAuthMiddleware))
>      @Action string security() {
>          return "It's a security page.";
>      }

    @Middleware(fullyQualifiedName!IpFilterMiddleware, fullyQualifiedName!BasicAuthMiddleware)
    @Action string security() {
        return "It's a security page.";
    }

I would prefer we offered UFCS to work on types instead. This would give the same syntax as you wanted and it is not specific to the use case.
July 17, 2020
On Friday, 17 July 2020 at 02:44:52 UTC, Heromyth wrote:
> How about a new property for class and struct like `.stringof` to get the fully qualified name?
>
> I know the `fullyQualifiedName` can do this. If a new property like `.qualifiedName` added to class and struct, the code blown:
>
>     @Middleware(fullyQualifiedName!(IpFilterMiddleware), fullyQualifiedName!(BasicAuthMiddleware))
>     @Action string security() {
>         return "It's a security page.";
>     }
>
> may be changed as:
>
>     @Middleware(IpFilterMiddleware.qualifiedName, BasicAuthMiddleware.qualifiedName)
>     @Action string security() {
>         return "It's a security page.";
>     }
>
> It looks better, does it?

Note that you can also make an alias for fullyQualifiedName:

import fqn = std.traits: fullyQualifiedName;
July 17, 2020
On Friday, 17 July 2020 at 03:19:18 UTC, rikki cattermole wrote:
> On 17/07/2020 2:44 PM, Heromyth wrote:
>> @Middleware(fullyQualifiedName!(IpFilterMiddleware), fullyQualifiedName!(BasicAuthMiddleware))
>>      @Action string security() {
>>          return "It's a security page.";
>>      }
>
>     @Middleware(fullyQualifiedName!IpFilterMiddleware, fullyQualifiedName!BasicAuthMiddleware)
>     @Action string security() {
>         return "It's a security page.";
>     }
>
> I would prefer we offered UFCS to work on types instead. This would give the same syntax as you wanted and it is not specific to the use case.

Yes, please
July 17, 2020
On Friday, 17 July 2020 at 02:44:52 UTC, Heromyth wrote:
> How about a new property for class and struct like `.stringof` to get the fully qualified name?
>
> I know the `fullyQualifiedName` can do this. If a new property like `.qualifiedName` added to class and struct, the code blown:
>
>     @Middleware(fullyQualifiedName!(IpFilterMiddleware), fullyQualifiedName!(BasicAuthMiddleware))
>     @Action string security() {
>         return "It's a security page.";
>     }
>
> may be changed as:
>
>     @Middleware(IpFilterMiddleware.qualifiedName, BasicAuthMiddleware.qualifiedName)
>     @Action string security() {
>         return "It's a security page.";
>     }
>
> It looks better, does it?

There is a second reason for wanting it, which is that the fullyQualified name template is rather expensive to instantiate.
July 17, 2020
On Friday, 17 July 2020 at 03:19:18 UTC, rikki cattermole wrote:
> On 17/07/2020 2:44 PM, Heromyth wrote:
>> @Middleware(fullyQualifiedName!(IpFilterMiddleware), fullyQualifiedName!(BasicAuthMiddleware))
>>      @Action string security() {
>>          return "It's a security page.";
>>      }
>
>     @Middleware(fullyQualifiedName!IpFilterMiddleware, fullyQualifiedName!BasicAuthMiddleware)
>     @Action string security() {
>         return "It's a security page.";
>     }
>
> I would prefer we offered UFCS to work on types instead. This would give the same syntax as you wanted and it is not specific to the use case.

It's not so easy to do that.
type function do attempt that and indeed with my WIP type function extension you could do a fullyQualifiedName type-function which, (because type functions are regular functions) is callable with UFCS. (And it avoids the template instance overhead.)