Skip to content

Commit

Permalink
feat(read): added hierarchy reading feature
Browse files Browse the repository at this point in the history
  • Loading branch information
FatulM committed Oct 10, 2021
1 parent b4ae7c7 commit 1027b7f
Show file tree
Hide file tree
Showing 36 changed files with 3,215 additions and 10 deletions.
8 changes: 8 additions & 0 deletions .tools/cpex
Expand Up @@ -14,6 +14,10 @@ cp example/bin/sealed/nullsafe/data/simple/common.dart sealed_annotations/exampl
cp example/bin/sealed/nullsafe/data/simple/common.sealed.dart sealed_annotations/example/
cp example/bin/sealed/nullsafe/data/generic/result_complex.dart sealed_annotations/example/
cp example/bin/sealed/nullsafe/data/generic/result_complex.sealed.dart sealed_annotations/example/
cp example/bin/sealed/nullsafe/data/simple/hierarchy.dart sealed_annotations/example/
cp example/bin/sealed/nullsafe/data/simple/hierarchy.sealed.dart sealed_annotations/example/
cp example/bin/sealed/nullsafe/data/generic/result_hierarchy.dart sealed_annotations/example/
cp example/bin/sealed/nullsafe/data/generic/result_hierarchy.sealed.dart sealed_annotations/example/

cp example/bin/sealed/nullsafe/data/simple/weather.dart sealed_generators/example/
cp example/bin/sealed/nullsafe/data/simple/weather.sealed.dart sealed_generators/example/
Expand All @@ -27,5 +31,9 @@ cp example/bin/sealed/nullsafe/data/simple/common.dart sealed_generators/example
cp example/bin/sealed/nullsafe/data/simple/common.sealed.dart sealed_generators/example/
cp example/bin/sealed/nullsafe/data/generic/result_complex.dart sealed_generators/example/
cp example/bin/sealed/nullsafe/data/generic/result_complex.sealed.dart sealed_generators/example/
cp example/bin/sealed/nullsafe/data/simple/hierarchy.dart sealed_generators/example/
cp example/bin/sealed/nullsafe/data/simple/hierarchy.sealed.dart sealed_generators/example/
cp example/bin/sealed/nullsafe/data/generic/result_hierarchy.dart sealed_generators/example/
cp example/bin/sealed/nullsafe/data/generic/result_hierarchy.sealed.dart sealed_generators/example/

echo DONE
8 changes: 8 additions & 0 deletions .tools/cpex.bat
Expand Up @@ -14,6 +14,10 @@ copy example\bin\sealed\nullsafe\data\simple\common.dart sealed_annotations\exam
copy example\bin\sealed\nullsafe\data\simple\common.sealed.dart sealed_annotations\example\
copy example\bin\sealed\nullsafe\data\generic\result_complex.dart sealed_annotations\example\
copy example\bin\sealed\nullsafe\data\generic\result_complex.sealed.dart sealed_annotations\example\
copy example\bin\sealed\nullsafe\data\simple\hierarchy.dart sealed_annotations\example\
copy example\bin\sealed\nullsafe\data\simple\hierarchy.sealed.dart sealed_annotations\example\
copy example\bin\sealed\nullsafe\data\generic\result_hierarchy.dart sealed_annotations\example\
copy example\bin\sealed\nullsafe\data\generic\result_hierarchy.sealed.dart sealed_annotations\example\

copy example\bin\sealed\nullsafe\data\simple\weather.dart sealed_generators\example\
copy example\bin\sealed\nullsafe\data\simple\weather.sealed.dart sealed_generators\example\
Expand All @@ -27,5 +31,9 @@ copy example\bin\sealed\nullsafe\data\simple\common.dart sealed_generators\examp
copy example\bin\sealed\nullsafe\data\simple\common.sealed.dart sealed_generators\example\
copy example\bin\sealed\nullsafe\data\generic\result_complex.dart sealed_generators\example\
copy example\bin\sealed\nullsafe\data\generic\result_complex.sealed.dart sealed_generators\example\
copy example\bin\sealed\nullsafe\data\simple\hierarchy.dart sealed_generators\example\
copy example\bin\sealed\nullsafe\data\simple\hierarchy.sealed.dart sealed_generators\example\
copy example\bin\sealed\nullsafe\data\generic\result_hierarchy.dart sealed_generators\example\
copy example\bin\sealed\nullsafe\data\generic\result_hierarchy.sealed.dart sealed_generators\example\

echo DONE
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,7 @@
## 1.12.0

- Added hierarchy feature to use sealed classes directly in sealed hierarchies

## 1.11.0

- Added whenOrNull and mapOrNull methods (#12)
Expand Down
46 changes: 46 additions & 0 deletions README.md
Expand Up @@ -321,6 +321,52 @@ abstract class _WeatherInfo {
}
```

### Hierarchy Feature

If Sealed classes are in the same file you can reference them directly using their manifest class name. This is to
avoid `@WithType` annotation and better refactoring capability.

```dart
@Sealed()
abstract class _Apple {
void eat();
}
@Sealed()
abstract class _Banana {
void eat();
}
@Sealed()
abstract class _Basket {
void friends(_Apple? apple, _Banana? banana);
// or equivalently
// void friends(@WithType('Apple?') apple, @WithType('Banana?') banana);
}
```

And for generic case:

```dart
@Sealed()
abstract class _Result<D extends num> {
void success(D data);
void error(Object exception);
}
@Sealed()
abstract class _Basket {
void hold(_Result<int> x);
// or equivalently:
// void hold(@WithType('Result<int>') x);
}
```

`@WithType` annotation will override hierarchy feature if present.

## Common Fields

Sometimes you need some fields to be present in all of your sealed classes. For example consider making a sealed class
Expand Down
4 changes: 4 additions & 0 deletions example/CHANGELOG.md
@@ -1,3 +1,7 @@
## 1.12.0

- Added hierarchy feature to use sealed classes directly in sealed hierarchies

## 1.11.0

- Added whenOrNull and mapOrNull methods (#12)
Expand Down
46 changes: 46 additions & 0 deletions example/README.md
Expand Up @@ -321,6 +321,52 @@ abstract class _WeatherInfo {
}
```

### Hierarchy Feature

If Sealed classes are in the same file you can reference them directly using their manifest class name. This is to
avoid `@WithType` annotation and better refactoring capability.

```dart
@Sealed()
abstract class _Apple {
void eat();
}
@Sealed()
abstract class _Banana {
void eat();
}
@Sealed()
abstract class _Basket {
void friends(_Apple? apple, _Banana? banana);
// or equivalently
// void friends(@WithType('Apple?') apple, @WithType('Banana?') banana);
}
```

And for generic case:

```dart
@Sealed()
abstract class _Result<D extends num> {
void success(D data);
void error(Object exception);
}
@Sealed()
abstract class _Basket {
void hold(_Result<int> x);
// or equivalently:
// void hold(@WithType('Result<int>') x);
}
```

`@WithType` annotation will override hierarchy feature if present.

## Common Fields

Sometimes you need some fields to be present in all of your sealed classes. For example consider making a sealed class
Expand Down
18 changes: 18 additions & 0 deletions example/bin/sealed/nullsafe/data/generic/result_hierarchy.dart
@@ -0,0 +1,18 @@
import 'package:sealed_annotations/sealed_annotations.dart';

part 'result_hierarchy.sealed.dart';

@Sealed()
abstract class _Result<D extends num> {
void success(D data);

void error(Object exception);
}

@Sealed()
abstract class _Basket {
void hold(
_Result<int> x,
_Result<double>? y,
);
}

0 comments on commit 1027b7f

Please sign in to comment.