diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Cargo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Cargo.java index 0c2e010591..0e8008e4e6 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Cargo.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Cargo.java @@ -26,10 +26,14 @@ import com.moandjiezana.toml.TomlWriter; import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; + +import org.cactoos.io.OutputStreamTo; +import org.cactoos.io.OutputTo; import org.cactoos.map.MapEntry; import org.cactoos.map.MapOf; @@ -40,7 +44,7 @@ * This class have save method and needs to have explanatory * comment too via Commented class. */ -public class Cargo { +public class Cargo extends Savable { /** * Package attributes. */ @@ -61,6 +65,10 @@ public class Cargo { * @param name Name of lib. */ public Cargo(final String name) { + super( + name, + "rs" + ); this.pack = new MapOf<>( new MapEntry<>("name", name), new MapEntry<>("version", "0.1.0"), @@ -85,17 +93,15 @@ public void add(final String crate, final Object content) { /** * Save it to specified folder. - * @param target Directory where to save to. * @throws IOException If any issues with I/O */ - public void save(final File target) throws IOException { + public String content() { final Map raw = new HashMap<>(); raw.put("package", this.pack); raw.put("dependencies", this.dependencies); raw.put("lib", this.lib); - new TomlWriter().write( - raw, - target + return new TomlWriter().write( + raw ); } } diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Commented.java b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Commented.java index 2a8b85d201..c1149ff41f 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Commented.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Commented.java @@ -31,22 +31,31 @@ */ public class Commented extends Savable { + final Savable origin; + final String start; + /** * Ctor. - * @param original Original object to save. + * @param origin Original object to save. * @param start Prefix of commentary. */ - public Commented(final Savable original, final String start) { + public Commented(final Savable origin, final String start) { super( - original.name, - original.ext, - () -> String.format( - "%s %s%s%s", - start, - new Disclaimer(), - System.lineSeparator(), - original.content.value() - ) + origin.name, + origin.ext + ); + this.origin = origin; + this.start = start; + } + + @Override + String content() { + return String.format( + "%s %s%s%s", + this.start, + new Disclaimer(), + System.lineSeparator(), + this.origin.content() ); } } diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Module.java b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Module.java index d60e515142..2fedeca51c 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Module.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Module.java @@ -30,6 +30,8 @@ */ public class Module extends Savable { + final String raw; + /** * Ctor. * @param raw Source code of rust insert. @@ -38,8 +40,14 @@ public class Module extends Savable { public Module(final String raw, final String name) { super( name, - "rs", - () -> raw + "rs" ); + this.raw = raw; + } + + @Override + String content() { + return this.raw; } + } diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Native.java b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Native.java index c138edc0ce..7f4db358b5 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Native.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Native.java @@ -31,6 +31,8 @@ */ public final class Native extends Savable { + final String pack; + /** * Ctor. * @param name Name of the class. @@ -39,25 +41,30 @@ public final class Native extends Savable { public Native(final String name, final String pack) { super( name, - "java", - () -> String.join( - System.lineSeparator(), - String.format( - "package %s;", - pack - ), - "import org.eolang.Universe;", - String.format( - "public class %s {", - name - ), - String.format( - " public static native byte[] %s", - name - ), - " (final Universe universe);", - "}" - ) + "java" + ); + this.pack = pack; + } + + @Override + String content() { + return String.join( + System.lineSeparator(), + String.format( + "package %s;", + pack + ), + "import org.eolang.Universe;", + String.format( + "public class %s {", + name + ), + String.format( + " public static native byte[] %s", + name + ), + " (final Universe universe);", + "}" ); } } diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Project.java b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Project.java index 76a2195658..6f409de911 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Project.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Project.java @@ -108,7 +108,7 @@ public Path save() throws IOException { for (final Module module: this.modules) { new Commented(module, "//").save(this.footprint); } - this.cargo.save(this.dest.resolve("Cargo.toml").toFile()); + this.cargo.save(new FtDefault(this.dest.resolve("Cargo.toml"))); return this.dest; } } diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Savable.java b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Savable.java index 4b407e98a7..572a3f83d8 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Savable.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/rust/Savable.java @@ -32,7 +32,7 @@ * @since 0.30 * @checkstyle VisibilityModifierCheck (20 lines) */ -public class Savable { +public abstract class Savable { /** * Name of file. @@ -47,18 +47,16 @@ public class Savable { /** * Content inside file. */ - protected final Scalar content; + abstract String content(); /** * Ctor. * @param name Name of the file. * @param ext Extension. - * @param content Content. */ - public Savable(final String name, final String ext, final Scalar content) { + public Savable(final String name, final String ext) { this.name = name; this.ext = ext; - this.content = content; } /** @@ -67,6 +65,6 @@ public Savable(final String name, final String ext, final Scalar content * @throws IOException If any issues with IO. */ public void save(final Footprint footprint) throws IOException { - footprint.save(this.name, this.ext, this.content); + footprint.save(this.name, this.ext, this::content); } } diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/rust/CommentedTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/rust/CommentedTest.java index 026920d4ca..7be62616a8 100644 --- a/eo-maven-plugin/src/test/java/org/eolang/maven/rust/CommentedTest.java +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/rust/CommentedTest.java @@ -40,12 +40,17 @@ final class CommentedTest { @Test void addsComment(@TempDir final Path temp) throws Exception { + final String content = "content"; new Commented( new Savable( "name", - "ext", - () -> "content" - ), + "ext" + ) { + @Override + String content() { + return content; + } + }, "//" ).save(new FtDefault(temp)); MatcherAssert.assertThat( @@ -55,7 +60,7 @@ void addsComment(@TempDir final Path temp) throws Exception { Matchers.stringContainsInOrder( "// This file was auto-generated by eo-maven-plugin", System.lineSeparator(), - "content" + content ) ); }