jdiutil 1.3.0
Just-Do-It util mixin, some small util mixin to make life easier: string interpolation etc ...
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
jdiutil: Just-Do-It util lib
Some small util mixin to make life easier, or reducing boilerplate code:
Each of these mixins can be used individually or together in any combination:
- string interpolation for easy debug print:
_S
with var name;_s
without var name GenerateToString
will generate string with class fields content, instead of just plain pointer.ReadOnly
,ReadWrite
declare fields without boilerplate codeSingleton
, Low-Lock Singleton Pattern https://wiki.dlang.org/Low-Lock_Singleton_PatternDeclImmutableString
: declare immutable string without boilerplate codeAtomicCounted
, atomic counter
Examples, check app.d:
public import jdiutil;
class Point {
// declare fields
mixin ReadOnly! (int, "x", 3);
mixin ReadWrite!(double, "y");
mixin ReadWrite!(string, "label", "default value");
// atomic counter
mixin AtomicCounted;
// this is a Singleton class!
mixin Singleton!Point;
// debug print string helper
mixin(GenerateToString);
// the Singleton only has empty {} ctor, customInit(...) can be done like this
Point customInit(double whatever) {
_y = whatever;
return this;
}
}
/* Mis-usage error: Singleton pattern is intended to be only applied to class! e.g. not struct.
struct Foo {
mixin Singleton!Foo;
}
*/
void main() {
int i = 100;
double d = 1.23456789;
Point thePoint = Point.getSingleton().customInit(0.456); // customInit(...)!
// multiple vars separated by ';'
// _S with var name; _s without var name
writeln(mixin(_S!"with var name: {i; d; thePoint}"));
writeln(mixin(_s!"without var name: {i; d; thePoint}"));
//thePoint.x = 4; // compile Error: x is ReadOnly
thePoint.y = 4; // ok
thePoint.incCount();
logger.info(mixin(_S!"works in logger too: {i; d; thePoint}"));
thePoint.y(3.14).label("pi"); // ok
string str = mixin(_S!"assign to string with custom format: {i; d%06.2f; thePoint}");
writeln(str);
Point samePoint = Point.getSingleton();
samePoint.incCount();
writeln(mixin(_S!"it's the same point: {thePoint; samePoint}"));
}
Output:
with var name: i=100 d=1.23457 thePoint=app.Point(_x=3 _y=0.456 _label=default value _counter=0)
without var name: 100 1.23457 app.Point(_x=3 _y=0.456 _label=default value _counter=0)
2020-06-24T15:59:04.245 [info] app.d:50:main works in logger too: i=100 d=1.23457 thePoint=app.Point(_x=3 _y=4 _label=default value _counter=1)
assign to string with custom format: i=100 d=001.23 thePoint=app.Point(_x=3 _y=3.14 _label=pi _counter=1)
it's the same point: thePoint=app.Point(_x=3 _y=3.14 _label=pi _counter=2) samePoint=app.Point(_x=3 _y=3.14 _label=pi _counter=2)
DeclImmutableString
mixin DeclImmutableString!("unit", "test");
// expand to:
immutable string UNIT = "unit";
immutable string TEST = "test";
Build:
Have to use rust nightly for cbindgen
$ rustup default nightly
- 1.3.0 released a year ago
- mw66/jdiutil
- BSL-1.0
- Copyright © 2020, mw66
- Authors:
- Dependencies:
- fluent-asserts, emsi_containers
- Versions:
-
1.3.0 2023-Jun-19 1.2.3 2023-Jun-16 1.2.1 2023-May-14 1.2.0 2022-Nov-14 1.1.7 2022-Jul-27 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
0 downloads this month
-
121 downloads total
-
- Score:
- 0.7
- Short URL:
- jdiutil.dub.pm