Concepts
Arc uses concept types as strongly-typed wrappers around primitives such as Guid, string, or int. Without special handling, the generated API schema would expose these as complex objects with a single Value property—which is rarely what API consumers expect.
The ConceptSchemaTransformer detects any schema type that inherits from ConceptAs<T> and replaces the schema with the equivalent JSON primitive type of the underlying value.
Example
public record CustomerId(Guid Value) : ConceptAs<Guid>(Value);
Without the transformer the schema for CustomerId would be:
{
"type": "object",
"properties": {
"value": { "type": "string", "format": "uuid" }
}
}
With the transformer the schema becomes:
{ "type": "string", "format": "uuid" }
This applies wherever the concept type appears — as a request parameter, in a request body, or in a response schema.
Supported Underlying Types
The transformer maps any primitive or common .NET type that ConceptAs<T> supports:
| .NET type | JSON Schema type | Format |
|---|---|---|
Guid |
string |
uuid |
string |
string |
— |
int / long |
integer |
int32 / int64 |
float / double |
number |
float / double |
bool |
boolean |
— |
DateTimeOffset / DateTime |
string |
date-time |