Comments (4)
Did some more research and if you seal the override in the union declaration, it should work exactly as intended. Here's an example:
using Dunet;
using static BusinessLogicResult<int>;
BusinessLogicResult<int> ok = new Ok(42);
BusinessLogicResult<int> notFound = new EntityNotFound();
BusinessLogicResult<int> unauthorized = new UnauthorizedAccess();
PrintResult(ok); // Prints "42"
PrintResult(notFound); // Prints "Not found."
PrintResult(unauthorized); // Prints "Unauthorized access."
static void PrintResult<T>(BusinessLogicResult<T> result) => Console.WriteLine(result.ToString());
[Union]
public partial record BusinessLogicResult<T>
{
public partial record Ok(T Value);
public partial record EntityNotFound();
public partial record UnauthorizedAccess();
public sealed override string ToString() =>
Match(
ok => ok.Value.ToString(),
entityNotFound => "Not found.",
unauthorizedAccess => "Unauthorized access."
);
}
from dunet.
Well thank you. I didn't know about this solution.
from dunet.
Hey, thanks for contributing your idea!
I'm not sure if source generation is the right approach to this problem because it's really inflexible and only a little bit less code than overriding the ToString()
methods yourself like this:
[Dunet.Union]
public partial record BussinesLogicResult<T>
{
public partial record Ok(T Value)
{
public override string ToString() => Value.ToString();
}
public partial record EntityNotFound
{
public override string ToString() => "Not found.";
}
public partial record UnauthorizedAccess
{
public override string ToString() => "Unauthorized access.";
}
}
Another simple alternative that I also think is better than source generation is creating your own extension method like this:
public static class BusinessLogicResultExtensions
{
public static string ToStr<T>(this BusinessLogicResult<T> result) =>
result.Match(
ok => ok.Value.ToString(),
entityNotFound => "Not found.",
unauthorizedAccess => "Unauthorized access."
);
}
from dunet.
I'm not sure if source generation is the right approach to this problem because it's really inflexible and only a little bit less code than overriding the ToString() methods yourself like this:
That's not pretty code.
As a result, the simplicity and ease of use of Dunet is lost.
Another simple alternative that I also think is better than source generation is creating your own extension method like this:
I am talking about the ToString
method because it is implicitly used in many places in C# applications (logging, debug view, orher recorded,...).
from dunet.
Related Issues (20)
- Record struct union support HOT 8
- Anonymous union variants
- Match on a specific union value only
- Unwrap union types HOT 2
- Simplify instantiation of generic-bound union members HOT 1
- Make common members accessible without matching HOT 4
- Allow matching with static functions
- Implicit conversions clash with required union properties HOT 1
- Separate Attributes into another project HOT 4
- Question: make it to work with asp net HOT 6
- Prefer `_ is _ _` pattern HOT 1
- Add Action with the type in the else of a MatchXYZ HOT 7
- Annotate Generated Code with GeneratedCodeAttribute
- Generating Generic Options
- Async match support HOT 2
- Add `Action` based `Match` (or similarly named) method HOT 5
- Async Action Match
- Do not generate implicit conversions if argument is an interface
- Disable CS1591 in generated code
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dunet.