add File overload for Loader.fromFile (#163)

add File overload for Loader.fromFile
merged-on-behalf-of: BBasile <BBasile@users.noreply.github.com>
This commit is contained in:
Cameron Ross 2018-06-15 06:01:43 -03:00 committed by The Dlang Bot
parent 894982e32d
commit aee64a5161

View file

@ -10,6 +10,7 @@ module dyaml.loader;
import std.exception; import std.exception;
import std.file; import std.file;
import std.stdio : File;
import std.string; import std.string;
import dyaml.composer; import dyaml.composer;
@ -55,6 +56,7 @@ struct Loader
/** Construct a Loader to load YAML from a file. /** Construct a Loader to load YAML from a file.
* *
* Params: filename = Name of the file to load from. * Params: filename = Name of the file to load from.
* file = Already-opened file to load from.
* *
* Throws: YAMLException if the file could not be opened or read. * Throws: YAMLException if the file could not be opened or read.
*/ */
@ -72,6 +74,13 @@ struct Loader
.format(filename, e.msg)); .format(filename, e.msg));
} }
} }
/// ditto
static Loader fromFile(File file) @system
{
auto loader = Loader(file.byChunk(4096).join);
loader.name_ = file.name;
return loader;
}
/** Construct a Loader to load YAML from a string. /** Construct a Loader to load YAML from a string.
* *
@ -332,6 +341,19 @@ struct Loader
auto rootNode = Loader.fromFile("example.yaml").load(); auto rootNode = Loader.fromFile("example.yaml").load();
assert(rootNode == "Hello world!"); assert(rootNode == "Hello world!");
} }
/// Load single YAML document from an already-opened file:
@system unittest
{
// Open a temporary file
auto file = File.tmpfile;
// Write valid YAML
file.write("Hello world!");
// Return to the beginning
file.seek(0);
// Load document
auto rootNode = Loader.fromFile(file).load();
assert(rootNode == "Hello world!");
}
/// Load all YAML documents from a file: /// Load all YAML documents from a file:
@safe unittest @safe unittest
{ {