Get unknown symbol (struct, method, class) tagged with User Defined Attributes

Steven Schveighoffer schveiguy at gmail.com
Tue May 12 04:02:18 UTC 2020


On 5/11/20 11:30 PM, Doug wrote:
> On Tuesday, 12 May 2020 at 02:53:53 UTC, Adam D. Ruppe wrote:
>>
>> see std.traits.getSymbolsByUDA
> 
> Thanks for the link. I did see that one. But that function searches 
> within known symbols. My use case if for a library that's used outside 
> of my application. In that case, I wouldn't know which symbol a library 
> applies an annotation to. This is why I asked for how to get a list of 
> unknown symbols from a known UDA.
> 
> To use a REST frame work as an example, I would supply a @GET annotation 
> and a user would apply that annotation to a handler method. I wouldn't 
> know the method or module in advanced so I wouldn't know which symbol to 
> pass to "getSymbolsByUDA" of any of it's sibling functions.
> 
> I'm curious to see what I'd be able to do if this is possible.

So the idea is that you know the parent symbol.

In the case of serialization/deserialization, you give an instance of a 
type to serialize or deserialize. Then the library can search the 
symbols inside that type to see if any has the UDA you are looking for.

In the Rust example, there is a line of code:

let p: Person = serde_json::from_str(data)?;

I'm assuming that this conversion is detected and figured out (i.e. this 
is how serde "finds" the type desired). For D, it would look something like:

auto p = serde_json.from_str!Person(data);

If you want a list of ALL symbols that have the UDA in the application, 
that would require some form of runtime reflection (like Java). D has 
very limited support for runtime reflection. In D, you would use some 
form of registration to tell the system about your symbols.

-Steve


More information about the Digitalmars-d-learn mailing list