Skip to content

lempiji/rx

Repository files navigation

Reactive Extensions for D Programming Language

Dub version MIT License Build Status codecov

Overview

This is a library like Rx.NET for asynchronous or event based programs, based on the concept of OutputRange.

The operators' name is based on std.algorithm and ReactiveX.

Example

import rx; import std.conv : to; import std.range : iota, put; void main() { // create own source of int auto subject = new SubjectObject!int; // define result array string[] result; // define pipeline and subscribe // sequence: source -> filter by even -> map to string -> join to result auto disposable = subject.filter!(n => n % 2 == 0).map!(o => to!string(o)) .doSubscribe!(text => result ~= text); // set unsubscribe on exit // it is not necessary in this simple example, // but in many cases you should call dispose to prevent memory leaks. scope (exit) disposable.dispose(); // put values to source.  put(subject, iota(10)); // result is like this assert(result == ["0", "2", "4", "6", "8"]); }

And more examples or Documents

Usage

Setting dependencies in dub.json

{ ... "dependencies": { "rx": "~>0.10.0" } }

or dub.sdl

dependency "rx" version="~>0.10.0" 

Concepts

Basic interfaces

All operators are written using template and struct for optimization. this example is a binary interface like std.range.interfaces.

//module rx.disposable interface Disposable { void dispose(); } //module rx.observer interface Observer(E) : OutputRange!E { //void put(E obj); //inherits from OutputRange!E void completed(); void failure(Exception e); } //module rx.observable interface Observable(E) { alias ElementType = E; Disposable subscribe(Observer!E observer); }

Supported Compilers

Supported compilers are dmd and ldc that latest 3 versions.

License

This library is under the MIT License.
Some code is borrowed from Rx.NET.

Contributing

Issue and PullRequest are welcome! 😃

Refer to CONTRIBUTING.md for details.

Development

Build and unittest

git clone https://github.com/lempiji/rx cd rx dub test

Update documents

Use https://github.com/adamdruppe/adrdox

Future work

  • generic observable factory
    • create, start, timer, interval
  • more subjects
    • publish, connectable
  • more algorithms
    • window, multicast
  • more test
  • more documents

About

Reactive Extensions for D Programming Language

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages