/glue-d

Bunch of different D-lang tools glued together with some sprinkles on top

Primary LanguageDApache License 2.0Apache-2.0

glue-d

What is it?

Bunch of different D-lang tools glued together with some sprinkles on top.

The point is to implement autoscanning, implement some annotation system (both done) then glue together a bunch of other projects: forked dejector for DI, mirror for reflection. Together with that this will become full application context, with runtime features, like autowiring, inheritance inspection and instantiation, as well as compile-time component scan, stereotyping, auto-implementation of interfaces, etc.

Next integrations will probably include vibe-d and maybe some data drivers.

Heavily inspired by Spring.

Status

On Unix-like systems we build with latest compiler versions (see details, we don't specify version explicitly in the configuration).

Unfortunately, AppVeyor doesn't support per-job badges (at least yet). We build our project with DMD (stable) on x86 and x64 and LDC (stable) on x64.

GDC is explicitly not supported.

master

Really old, basically useless. Tagged just so that we have presence on dub.

dev

codecov dev status dev status

Detailed status:

  • xenial with dmd
  • bionic with dmd
  • osx with dmd
  • xenial with ldc
  • bionic with ldc
  • osx with ldc

ToDo

bold are WIP and highest prio

  • conceptual
    • figure out packaging - there are different qualifiers for source sets, they will probably be non-empty for libraries
      • figure out how to compose application from annotations pointing to scannables
      • figure out naming - what is library, what is "bundle"/"starter", etc; we need some abstraction of library you depend on, add an annotation and autoconfiguration (scanning, defaults, etc)
  • new features
    • @PostConstruct methods
    • annotations enhancements:
      • validation (missing method/field/etc, only known Targets are types; validations here are "has (no) parameter of type/name", "name matches" with syntax sugar for "name starts/ends with")
      • @InheritAnnotations(target=aggregate/method/field) - if present, look into superclasses and copy annotations from super
    • enhanced resolveCall and friends
      • @Param(i/name, annotations...) - repeatable, used to define param-level annotations
      • @Seed on non-config method? (that would probably require either merging dejector to this repo, duplicating resolveCall here or moving seed, the whole annotations module and probably some annotation definitions there)
    • environment (string/string key-value pairs)
      • data is already gathered, but whats left is...
      • injection with @Config with support for simple types
    • value registry (environment required)
      • config inspection
      • autobinding structs/enums/simple types with @Value
    • indexing scanned classes (aliases/qualifiers in dejector will be useful, but not required; implementing in parallel will probably make API more consistent)
      • by stereotypes (with runtime-available stereotype instances)
    • vibe-d integration
      • controller stereotype & autobinding
      • repositories?
    • converters
      • you have component C1 in context
      • you have Converter!(C1, C2) in context
      • you have no C2 in context
      • Glue-D should figure out in runtime that it can provide C2 by applying converter to C1 instance
      • tbd: how to treat such instances when it comes to autobinding and interface resolution? (these are 2 cases, actually)