optics 0.2.0 copy "optics: ^0.2.0" to clipboard
optics: ^0.2.0 copied to clipboard

Lenses and prisms for Dart objects.

example/optics_example.dart

import 'package:optics/optics.dart';

import '../test/test_models.dart';

void main() {
  ApiPerson person = ApiPerson(
    name: 'Joe',
    address: Address(streetName: '123 Capital of Texas Hwy'),
  );

  assert(person.address.streetName == '123 Capital of Texas Hwy');

  /// Joe moved!
  person = person.addressOptic
      .compound(AddressOptics.streetName)
      .set('456 Mesa Dr');

  assert(person.address.streetName == '456 Mesa Dr');

  /// Joe got a job!
  person = SourceBinding(source: person, optic: PersonOptics.job).set(
    Job(
      address: Address(streetName: '789 E 6th St'),
      title: 'Sales bro',
    ),
  );

  assert(person.job?.title == 'Sales bro');

  final personJobTitle = PersonOptics.job.compound(JobOptics.title.asPrism());

  /// Joe got a promotion!
  person = personJobTitle.set(person, 'Executive sales bro');

  assert(person.job?.title == 'Executive sales bro');

  print(
    '''Howdy, ${person.name}!
You're ${personJobTitle.get(person)?.indefiniteArticle()} ${personJobTitle.get(person)}.
Nice place you've got @ ${person.addressOptic.compound(AddressOptics.streetName)()}.''',
  );
}
1
likes
150
points
5
downloads

Publisher

unverified uploader

Weekly Downloads

Lenses and prisms for Dart objects.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

meta

More

Packages that depend on optics