diff --git a/module/alias/cargo_will/Readme.md b/module/alias/cargo_will/Readme.md index a81235a462..df0d0f30ee 100644 --- a/module/alias/cargo_will/Readme.md +++ b/module/alias/cargo_will/Readme.md @@ -1,6 +1,7 @@ # Module :: cargo_will [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_cargo_will_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_cargo_will_push.yml)[![docs.rs](https://img.shields.io/docsrs/cargo_will?color=e3e8f0&logo=docs.rs)](https://docs.rs/cargo_will)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fcargo_will_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20cargo_will_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Utility to publish multi-crate and multi-workspace environments and maintain their consistency. diff --git a/module/alias/file_tools/Readme.md b/module/alias/file_tools/Readme.md index 7223406a8c..8be3f42567 100644 --- a/module/alias/file_tools/Readme.md +++ b/module/alias/file_tools/Readme.md @@ -1,5 +1,6 @@ [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_file_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_file_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/file_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/file_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ffile_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20file_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) # Module :: file_tools diff --git a/module/alias/fundamental_data_type/Readme.md b/module/alias/fundamental_data_type/Readme.md index ff1ebeae88..e5daf36d9e 100644 --- a/module/alias/fundamental_data_type/Readme.md +++ b/module/alias/fundamental_data_type/Readme.md @@ -3,6 +3,7 @@ # Module :: fundamental_data_type [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_fundamental_data_type_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_fundamental_data_type_push.yml)[![docs.rs](https://img.shields.io/docsrs/fundamental_data_type?color=e3e8f0&logo=docs.rs)](https://docs.rs/fundamental_data_type)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ffundamental_data_type_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20fundamental_data_type_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) A collection of derive macros designed to enhance STD. diff --git a/module/alias/instance_of/Readme.md b/module/alias/instance_of/Readme.md index fe2d6b187b..53b5dfda3a 100644 --- a/module/alias/instance_of/Readme.md +++ b/module/alias/instance_of/Readme.md @@ -3,6 +3,7 @@ # Module :: instance_of [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_instance_of_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_instance_of_push.yml)[![docs.rs](https://img.shields.io/docsrs/instance_of?color=e3e8f0&logo=docs.rs)](https://docs.rs/instance_of)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Finstance_of_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20instance_of_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Macro to answer the question: does it implement a trait? diff --git a/module/alias/multilayer/Readme.md b/module/alias/multilayer/Readme.md index c453320b07..ca9526ae90 100644 --- a/module/alias/multilayer/Readme.md +++ b/module/alias/multilayer/Readme.md @@ -3,6 +3,7 @@ # Module :: multilayer [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_multilayer_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_multilayer_push.yml)[![docs.rs](https://img.shields.io/docsrs/multilayer?color=e3e8f0&logo=docs.rs)](https://docs.rs/multilayer)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fmultilayer_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20multilayer_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Protocol of modularity unifying interface of a module and introducing layers. diff --git a/module/alias/proc_macro_tools/Readme.md b/module/alias/proc_macro_tools/Readme.md index 957041ddef..1f67bc17d6 100644 --- a/module/alias/proc_macro_tools/Readme.md +++ b/module/alias/proc_macro_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: proc_macro_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_proc_macro_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_proc_macro_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/proc_macro_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/proc_macro_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fproc_macro_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20proc_macro_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools for writing procedural macros. diff --git a/module/alias/proper_tools/Readme.md b/module/alias/proper_tools/Readme.md index 5cc8f20264..9101308f80 100644 --- a/module/alias/proper_tools/Readme.md +++ b/module/alias/proper_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: proper_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_proper_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_proper_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/proper_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/proper_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fproper_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20proper_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of general purpose tools for solving problems. Fundamentally extend the language without spoiling, so may be used solely or in conjunction with another module of such kind. diff --git a/module/alias/werror/Readme.md b/module/alias/werror/Readme.md index cb1997a716..2e3b56c79e 100644 --- a/module/alias/werror/Readme.md +++ b/module/alias/werror/Readme.md @@ -3,6 +3,7 @@ # Module :: werror [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_werror_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_werror_push.yml)[![docs.rs](https://img.shields.io/docsrs/werror?color=e3e8f0&logo=docs.rs)](https://docs.rs/werror)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwerror_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20werror_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Basic exceptions handling mechanism. diff --git a/module/alias/willbe2/Readme.md b/module/alias/willbe2/Readme.md index c02ed08be5..ad078ccbe1 100644 --- a/module/alias/willbe2/Readme.md +++ b/module/alias/willbe2/Readme.md @@ -1,6 +1,7 @@ # Module :: willbe2 [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_willbe_2_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_willbe_2_push.yml)[![docs.rs](https://img.shields.io/docsrs/willbe2?color=e3e8f0&logo=docs.rs)](https://docs.rs/willbe2)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwillbe2_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20willbe2_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Utility to publish multi-crate and multi-workspace environments and maintain their consistency. diff --git a/module/alias/winterval/Readme.md b/module/alias/winterval/Readme.md index 5ee0920c46..e31fdfa097 100644 --- a/module/alias/winterval/Readme.md +++ b/module/alias/winterval/Readme.md @@ -3,6 +3,7 @@ # Module :: winterval [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_winterval_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_winterval_push.yml)[![docs.rs](https://img.shields.io/docsrs/winterval?color=e3e8f0&logo=docs.rs)](https://docs.rs/winterval)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwinterval_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20winterval_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Integer interval adapter for both Range and RangeInclusive. diff --git a/module/alias/wproc_macro/Readme.md b/module/alias/wproc_macro/Readme.md index e7e8c4fbbc..bca33a386a 100644 --- a/module/alias/wproc_macro/Readme.md +++ b/module/alias/wproc_macro/Readme.md @@ -3,6 +3,7 @@ # Module :: wproc_macro [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wproc_macro_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wproc_macro_push.yml)[![docs.rs](https://img.shields.io/docsrs/wproc_macro?color=e3e8f0&logo=docs.rs)](https://docs.rs/wproc_macro)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwproc_macro_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wproc_macro_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools for writing procedural macros. diff --git a/module/alias/wstring_tools/Readme.md b/module/alias/wstring_tools/Readme.md index 187385a312..c5813e1b00 100644 --- a/module/alias/wstring_tools/Readme.md +++ b/module/alias/wstring_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: wstring_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wstring_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wstring_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/wstring_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/wstring_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwstring_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wstring_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools to manipulate strings. diff --git a/module/alias/wtest/Readme.md b/module/alias/wtest/Readme.md index 5301d2d29b..3479675381 100644 --- a/module/alias/wtest/Readme.md +++ b/module/alias/wtest/Readme.md @@ -3,6 +3,7 @@ # Module :: wtest [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wtest_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wtest_push.yml)[![docs.rs](https://img.shields.io/docsrs/wtest?color=e3e8f0&logo=docs.rs)](https://docs.rs/wtest)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwtest_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wtest_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools for writing and running tests. diff --git a/module/alias/wtest_basic/Readme.md b/module/alias/wtest_basic/Readme.md index 0cee6912cf..9989fa1e2f 100644 --- a/module/alias/wtest_basic/Readme.md +++ b/module/alias/wtest_basic/Readme.md @@ -3,6 +3,7 @@ # Module :: wtest_basic [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wtest_basic_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wtest_basic_push.yml)[![docs.rs](https://img.shields.io/docsrs/wtest_basic?color=e3e8f0&logo=docs.rs)](https://docs.rs/wtest_basic)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwtest_basic_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wtest_basic_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools for writing and running tests. The most basic things. diff --git a/module/blank/exe_tools/Readme.md b/module/blank/exe_tools/Readme.md index 7bdcdff074..16678c27bd 100644 --- a/module/blank/exe_tools/Readme.md +++ b/module/blank/exe_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: exe_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_exe_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_exe_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/exe_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/exe_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fexe_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20exe_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of algorithms and structures to handle execution properly. diff --git a/module/blank/image_tools/Readme.md b/module/blank/image_tools/Readme.md index dfa2433b78..abfc9cfdca 100644 --- a/module/blank/image_tools/Readme.md +++ b/module/blank/image_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: image_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_image_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_image_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/image_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/image_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fimage_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20image_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collections of algorithms and structures to process images. diff --git a/module/blank/math_tools/Readme.md b/module/blank/math_tools/Readme.md index a1ac523cee..ab0dfd8ee0 100644 --- a/module/blank/math_tools/Readme.md +++ b/module/blank/math_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: math_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_math_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_math_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/math_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/math_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fmath_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20math_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) To be done. diff --git a/module/blank/w4d/Readme.md b/module/blank/w4d/Readme.md index 69792eb52c..db04225e8c 100644 --- a/module/blank/w4d/Readme.md +++ b/module/blank/w4d/Readme.md @@ -3,6 +3,7 @@ # Module :: math_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_w_4_d_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_w_4_d_push.yml)[![docs.rs](https://img.shields.io/docsrs/w4d?color=e3e8f0&logo=docs.rs)](https://docs.rs/w4d)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fw4d_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20w4d_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) To be done. diff --git a/module/blank/willbe_old/Readme.md b/module/blank/willbe_old/Readme.md index 8effa77c17..c84ec668b0 100644 --- a/module/blank/willbe_old/Readme.md +++ b/module/blank/willbe_old/Readme.md @@ -3,6 +3,7 @@ # Module :: willbe [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_willbe_old_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_willbe_old_push.yml)[![docs.rs](https://img.shields.io/docsrs/willbe_old?color=e3e8f0&logo=docs.rs)](https://docs.rs/willbe_old)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwillbe_old_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20willbe_old_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) ___ diff --git a/module/blank/wlang/Readme.md b/module/blank/wlang/Readme.md index cdee724926..11ad9cfb9c 100644 --- a/module/blank/wlang/Readme.md +++ b/module/blank/wlang/Readme.md @@ -3,6 +3,7 @@ # Module :: wlang [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wlang_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wlang_push.yml)[![docs.rs](https://img.shields.io/docsrs/wlang?color=e3e8f0&logo=docs.rs)](https://docs.rs/wlang)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwlang_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wlang_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Wlang. diff --git a/module/core/clone_dyn/Readme.md b/module/core/clone_dyn/Readme.md index 0bbdb93385..836736761f 100644 --- a/module/core/clone_dyn/Readme.md +++ b/module/core/clone_dyn/Readme.md @@ -2,6 +2,7 @@ # Module :: clone_dyn [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_clone_dyn_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_clone_dyn_push.yml)[![docs.rs](https://img.shields.io/docsrs/clone_dyn?color=e3e8f0&logo=docs.rs)](https://docs.rs/clone_dyn)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fclone_dyn_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20clone_dyn_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Derive to clone dyn structures. diff --git a/module/core/clone_dyn_meta/Readme.md b/module/core/clone_dyn_meta/Readme.md index e764c5c17e..6edde1ae08 100644 --- a/module/core/clone_dyn_meta/Readme.md +++ b/module/core/clone_dyn_meta/Readme.md @@ -2,6 +2,7 @@ # Module :: clone_dyn_meta [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_clone_dyn_meta_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_clone_dyn_meta_push.yml)[![docs.rs](https://img.shields.io/docsrs/clone_dyn_meta?color=e3e8f0&logo=docs.rs)](https://docs.rs/clone_dyn_meta)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fclone_dyn_meta_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20clone_dyn_meta_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Derive to clone dyn structures. diff --git a/module/core/collection_tools/Readme.md b/module/core/collection_tools/Readme.md index bbb34c6893..733dad2b14 100644 --- a/module/core/collection_tools/Readme.md +++ b/module/core/collection_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: collection_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_collection_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_collection_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/collection_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/collection_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fcollection_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20collection_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of general purpose tools to manipulate collections( containers like Vec/HashMap/HashSet... ). diff --git a/module/core/data_type/Readme.md b/module/core/data_type/Readme.md index eb8793524f..a7aa4c60f3 100644 --- a/module/core/data_type/Readme.md +++ b/module/core/data_type/Readme.md @@ -3,6 +3,7 @@ # Module :: data_type [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_data_type_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_data_type_push.yml)[![docs.rs](https://img.shields.io/docsrs/data_type?color=e3e8f0&logo=docs.rs)](https://docs.rs/data_type)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fdata_type_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20data_type_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of primal data types. diff --git a/module/core/derive_tools/Readme.md b/module/core/derive_tools/Readme.md index b79917724a..d6c827c5b1 100644 --- a/module/core/derive_tools/Readme.md +++ b/module/core/derive_tools/Readme.md @@ -3,6 +3,7 @@ [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_derive_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_derive_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/derive_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/derive_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fderive_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20derive_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) ### Basic use-case diff --git a/module/core/derive_tools_meta/Readme.md b/module/core/derive_tools_meta/Readme.md index b7da23ccbf..a76fa6de04 100644 --- a/module/core/derive_tools_meta/Readme.md +++ b/module/core/derive_tools_meta/Readme.md @@ -2,6 +2,7 @@ # Module :: derive_tools_meta [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_derive_tools_meta_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_derive_tools_meta_push.yml)[![docs.rs](https://img.shields.io/docsrs/derive_tools_meta?color=e3e8f0&logo=docs.rs)](https://docs.rs/derive_tools_meta)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fderive_tools_meta_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20derive_tools_meta_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of derives which extend STD. Its meta module. diff --git a/module/core/diagnostics_tools/Readme.md b/module/core/diagnostics_tools/Readme.md index 0ee94156ff..578a959f16 100644 --- a/module/core/diagnostics_tools/Readme.md +++ b/module/core/diagnostics_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: diagnostics_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_diagnostics_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_diagnostics_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/diagnostics_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/diagnostics_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fdiagnostics_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20diagnostics_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Diagnostics tools. diff --git a/module/core/error_tools/Readme.md b/module/core/error_tools/Readme.md index e76813f415..cef6a561ef 100644 --- a/module/core/error_tools/Readme.md +++ b/module/core/error_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: error_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_error_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_error_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/error_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/error_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ferror_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20error_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Basic exceptions handling mechanism. diff --git a/module/core/for_each/Readme.md b/module/core/for_each/Readme.md index 34c392761c..2edba80db9 100644 --- a/module/core/for_each/Readme.md +++ b/module/core/for_each/Readme.md @@ -3,6 +3,7 @@ # Module :: for_each [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_for_each_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_for_each_push.yml)[![docs.rs](https://img.shields.io/docsrs/for_each?color=e3e8f0&logo=docs.rs)](https://docs.rs/for_each)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ffor_each_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20for_each_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Apply a macro for each element of a list. @@ -123,4 +124,4 @@ cd wTools cd examples/for_each_trivial cargo run ``` - \ No newline at end of file +> \ No newline at end of file diff --git a/module/core/former/Readme.md b/module/core/former/Readme.md index 42a37ad6c6..ec0a4f16ec 100644 --- a/module/core/former/Readme.md +++ b/module/core/former/Readme.md @@ -3,6 +3,7 @@ # Module :: former [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_former_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_former_push.yml)[![docs.rs](https://img.shields.io/docsrs/former?color=e3e8f0&logo=docs.rs)](https://docs.rs/former)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fformer_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20former_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) A flexible and extensible implementation of the builder pattern. diff --git a/module/core/former_meta/Readme.md b/module/core/former_meta/Readme.md index c57f93549b..0cdd97f471 100644 --- a/module/core/former_meta/Readme.md +++ b/module/core/former_meta/Readme.md @@ -3,6 +3,7 @@ # Module :: former_meta [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_former_meta_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_former_meta_push.yml)[![docs.rs](https://img.shields.io/docsrs/former_meta?color=e3e8f0&logo=docs.rs)](https://docs.rs/former_meta)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fformer_meta_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20former_meta_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Former - a variation of builder pattern. Implementation of its derive macro. Should not be used independently, instead use module::former which relies on the module. diff --git a/module/core/fs_tools/Readme.md b/module/core/fs_tools/Readme.md index c118754a12..391104d892 100644 --- a/module/core/fs_tools/Readme.md +++ b/module/core/fs_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: fs_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_fs_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_fs_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/fs_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/fs_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ffs_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20fs_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools to manipulate files. @@ -21,3 +22,14 @@ cd wTools cd examples/test_trivial cargo run ``` +ev +``` + +### Try out from the repository + +```sh +git clone https://github.com/Wandalen/wTools +cd wTools +cd examples/test_trivial +cargo run +``` diff --git a/module/core/implements/Readme.md b/module/core/implements/Readme.md index a48872c375..7b69a44714 100644 --- a/module/core/implements/Readme.md +++ b/module/core/implements/Readme.md @@ -3,6 +3,7 @@ # Module :: implements [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_implements_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_implements_push.yml)[![docs.rs](https://img.shields.io/docsrs/implements?color=e3e8f0&logo=docs.rs)](https://docs.rs/implements)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fimplements_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20implements_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Macro to answer the question: does it implement a trait? diff --git a/module/core/impls_index/Readme.md b/module/core/impls_index/Readme.md index b8fe0214fd..20233a064b 100644 --- a/module/core/impls_index/Readme.md +++ b/module/core/impls_index/Readme.md @@ -3,6 +3,7 @@ # Module :: impls_index [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_impls_index_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_impls_index_push.yml)[![docs.rs](https://img.shields.io/docsrs/impls_index?color=e3e8f0&logo=docs.rs)](https://docs.rs/impls_index)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fimpls_index_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20impls_index_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Several of macros to put each function under a named macro to index every function in a class. diff --git a/module/core/impls_index_meta/Readme.md b/module/core/impls_index_meta/Readme.md index b73a08a20d..b05af13f24 100644 --- a/module/core/impls_index_meta/Readme.md +++ b/module/core/impls_index_meta/Readme.md @@ -3,6 +3,7 @@ # Module :: impls_index_meta [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_impls_index_meta_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_impls_index_meta_push.yml)[![docs.rs](https://img.shields.io/docsrs/impls_index_meta?color=e3e8f0&logo=docs.rs)](https://docs.rs/impls_index_meta)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fimpls_index_meta_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20impls_index_meta_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Several of macros to put each function under a named macro to index every function in a class. diff --git a/module/core/include_md/Readme.md b/module/core/include_md/Readme.md index 8f10ded684..abb7ee05e3 100644 --- a/module/core/include_md/Readme.md +++ b/module/core/include_md/Readme.md @@ -3,6 +3,7 @@ # Module :: include_md [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_include_md_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_include_md_push.yml)[![docs.rs](https://img.shields.io/docsrs/include_md?color=e3e8f0&logo=docs.rs)](https://docs.rs/include_md)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Finclude_md_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20include_md_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Include markdown file or its section. diff --git a/module/core/inspect_type/Readme.md b/module/core/inspect_type/Readme.md index 5849bec9cb..fa657ca9f3 100644 --- a/module/core/inspect_type/Readme.md +++ b/module/core/inspect_type/Readme.md @@ -3,6 +3,7 @@ # Module :: inspect_type [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_inspect_type_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_inspect_type_push.yml)[![docs.rs](https://img.shields.io/docsrs/inspect_type?color=e3e8f0&logo=docs.rs)](https://docs.rs/inspect_type)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Finspect_type_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20inspect_type_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Diagnostic-purpose tools to inspect type of a variable and its size. diff --git a/module/core/interval_adapter/Readme.md b/module/core/interval_adapter/Readme.md index 85751c8aa6..f1d787b680 100644 --- a/module/core/interval_adapter/Readme.md +++ b/module/core/interval_adapter/Readme.md @@ -3,6 +3,7 @@ # Module :: interval_adapter [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_interval_adapter_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_interval_adapter_push.yml)[![docs.rs](https://img.shields.io/docsrs/interval_adapter?color=e3e8f0&logo=docs.rs)](https://docs.rs/interval_adapter)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Finterval_adapter_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20interval_adapter_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Integer interval adapter for both Range and RangeInclusive. diff --git a/module/core/is_slice/Readme.md b/module/core/is_slice/Readme.md index 257f82043c..ec18428049 100644 --- a/module/core/is_slice/Readme.md +++ b/module/core/is_slice/Readme.md @@ -3,6 +3,7 @@ # Module :: is_slice [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_is_slice_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_is_slice_push.yml)[![docs.rs](https://img.shields.io/docsrs/is_slice?color=e3e8f0&logo=docs.rs)](https://docs.rs/is_slice)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fis_slice_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20is_slice_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Macro to answer the question: is it a slice? diff --git a/module/core/iter_tools/Readme.md b/module/core/iter_tools/Readme.md index 27336e44a7..85a7cc830d 100644 --- a/module/core/iter_tools/Readme.md +++ b/module/core/iter_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: iter_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_iter_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_iter_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/iter_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/iter_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fiter_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20iter_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of general purpose tools to iterate. Currently it simply reexports itertools. @@ -50,3 +51,13 @@ cd wTools cd examples/iter_tools_trivial cargo run ``` +` + +### Try out from the repository + +```sh +git clone https://github.com/Wandalen/wTools +cd wTools +cd examples/iter_tools_trivial +cargo run +``` diff --git a/module/core/macro_tools/Readme.md b/module/core/macro_tools/Readme.md index 8f1bac5551..bdc3ed9217 100644 --- a/module/core/macro_tools/Readme.md +++ b/module/core/macro_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: proc_macro_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_macro_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_macro_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/macro_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/macro_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fmacro_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20macro_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools for writing procedural macros. diff --git a/module/core/mem_tools/Readme.md b/module/core/mem_tools/Readme.md index e2d4a14620..f4f61aa89d 100644 --- a/module/core/mem_tools/Readme.md +++ b/module/core/mem_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: mem_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_mem_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_mem_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/mem_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/mem_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fmem_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20mem_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of tools to manipulate memory. @@ -56,3 +57,4 @@ cargo run [![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) [![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=sample%2Frust%2Fmeta_tools_trivial,SAMPLE_FILE=.%2Fsrc%2Fmain.rs/https://github.com/Wandalen/wTools) [![docs.rs](https://raster.shields.io/static/v1?label=docs&message=online&color=eee&logo=docsdotrs&logoColor=eee)](https://docs.rs/meta_tools) +![docs.rs](https://raster.shields.io/static/v1?label=docs&message=online&color=eee&logo=docsdotrs&logoColor=eee)](https://docs.rs/meta_tools) diff --git a/module/core/meta_tools/Readme.md b/module/core/meta_tools/Readme.md index 37dc62439e..00d04fd5d8 100644 --- a/module/core/meta_tools/Readme.md +++ b/module/core/meta_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: meta_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_meta_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_meta_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/meta_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/meta_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fmeta_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20meta_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of general purpose meta tools. diff --git a/module/core/mod_interface/Readme.md b/module/core/mod_interface/Readme.md index f99bb5dea0..a1487f97b5 100644 --- a/module/core/mod_interface/Readme.md +++ b/module/core/mod_interface/Readme.md @@ -3,6 +3,7 @@ # Module :: mod_interface [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_mod_interface_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_mod_interface_push.yml)[![docs.rs](https://img.shields.io/docsrs/mod_interface?color=e3e8f0&logo=docs.rs)](https://docs.rs/mod_interface)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fmod_interface_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20mod_interface_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Protocol of modularity unifying interface of a module and introducing layers. @@ -156,3 +157,11 @@ cd wTools cd examples/mod_interface_trivial cargo run ``` +### Try out from the repository + +```sh +git clone https://github.com/Wandalen/wTools +cd wTools +cd examples/mod_interface_trivial +cargo run +``` diff --git a/module/core/mod_interface_meta/Readme.md b/module/core/mod_interface_meta/Readme.md index 7a9d48a3ea..9fe44bec29 100644 --- a/module/core/mod_interface_meta/Readme.md +++ b/module/core/mod_interface_meta/Readme.md @@ -3,8 +3,10 @@ # Module :: mod_interface_meta [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_mod_interface_meta_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_mod_interface_meta_push.yml)[![docs.rs](https://img.shields.io/docsrs/mod_interface_meta?color=e3e8f0&logo=docs.rs)](https://docs.rs/mod_interface_meta)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fmod_interface_meta_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20mod_interface_meta_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Protocol of modularity unifying interface of a module and introducing layers. Not intended to be used without runtime. This module and runtime is aggregate in module::mod_interface is [here](https://github.com/Wandalen/wTools/tree/master/module/core/mod_interface). +module and runtime is aggregate in module::mod_interface is [here](https://github.com/Wandalen/wTools/tree/master/module/core/mod_interface). diff --git a/module/core/process_tools/Readme.md b/module/core/process_tools/Readme.md index a0866e6aa8..3f1125368b 100644 --- a/module/core/process_tools/Readme.md +++ b/module/core/process_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: process_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_process_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_process_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/process_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/process_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fprocess_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20process_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of algorithms and structures to handle processes properly. diff --git a/module/core/process_tools/src/process.rs b/module/core/process_tools/src/process.rs index 98027c9f7a..f41e3bf120 100644 --- a/module/core/process_tools/src/process.rs +++ b/module/core/process_tools/src/process.rs @@ -176,6 +176,22 @@ pub( crate ) mod private report.out = out; + let err = String::from_utf8( output.stderr ) + .context( "Found invalid UTF-8" ) + .map_err( | e | + { + report.error = Err( e.into() ); + Err::< (), () >( () ) + }); + + if err.is_err() + { + return Err( report ); + } + let err = err.unwrap(); + + report.err = err; + if output.status.success() { Ok( report ) diff --git a/module/core/proper_path_tools/Readme.md b/module/core/proper_path_tools/Readme.md index 997039c5b6..b51a7fd283 100644 --- a/module/core/proper_path_tools/Readme.md +++ b/module/core/proper_path_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: proper_path_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_proper_path_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_proper_path_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/proper_path_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/proper_path_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fproper_path_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20proper_path_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of algorithms and structures to handle paths properly. diff --git a/module/core/reflect_tools/Readme.md b/module/core/reflect_tools/Readme.md index 8fb3c700f7..b0a2c24b6a 100644 --- a/module/core/reflect_tools/Readme.md +++ b/module/core/reflect_tools/Readme.md @@ -3,6 +3,7 @@ [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_reflect_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_reflect_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/reflect_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/reflect_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Freflect_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20reflect_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) ### Basic use-case diff --git a/module/core/reflect_tools_meta/Readme.md b/module/core/reflect_tools_meta/Readme.md index f5c0b7b052..c9d3a600ba 100644 --- a/module/core/reflect_tools_meta/Readme.md +++ b/module/core/reflect_tools_meta/Readme.md @@ -2,6 +2,7 @@ # Module :: reflect_tools_meta [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_reflect_tools_meta_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_reflect_tools_meta_push.yml)[![docs.rs](https://img.shields.io/docsrs/reflect_tools_meta?color=e3e8f0&logo=docs.rs)](https://docs.rs/reflect_tools_meta)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Freflect_tools_meta_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20reflect_tools_meta_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of mechanisms for reflection. Its meta module. Don't use directly. diff --git a/module/core/strs_tools/Readme.md b/module/core/strs_tools/Readme.md index d5fc4e3ef6..f162e59059 100644 --- a/module/core/strs_tools/Readme.md +++ b/module/core/strs_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: strs_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_strs_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_strs_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/strs_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/strs_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fstrs_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20strs_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools to manipulate strings. diff --git a/module/core/test_tools/Readme.md b/module/core/test_tools/Readme.md index 306e80b583..3d6a915053 100644 --- a/module/core/test_tools/Readme.md +++ b/module/core/test_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: test_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_test_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_test_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/test_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/test_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ftest_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20test_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools for writing and running tests. diff --git a/module/core/time_tools/Readme.md b/module/core/time_tools/Readme.md index d6aaa01504..d13bbb5b90 100644 --- a/module/core/time_tools/Readme.md +++ b/module/core/time_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: time_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_time_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_time_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/time_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/time_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ftime_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20time_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of general purpose time tools. diff --git a/module/core/typing_tools/Readme.md b/module/core/typing_tools/Readme.md index f68885bcef..042d605ed0 100644 --- a/module/core/typing_tools/Readme.md +++ b/module/core/typing_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: typing_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_typing_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_typing_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/typing_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/typing_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ftyping_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20typing_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of general purpose tools for type checking. diff --git a/module/core/variadic_from/Readme.md b/module/core/variadic_from/Readme.md index 806c17e631..b86b5f7b82 100644 --- a/module/core/variadic_from/Readme.md +++ b/module/core/variadic_from/Readme.md @@ -3,6 +3,7 @@ # Module :: variadic_from [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_variadic_from_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_variadic_from_push.yml)[![docs.rs](https://img.shields.io/docsrs/variadic_from?color=e3e8f0&logo=docs.rs)](https://docs.rs/variadic_from)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fvariadic_from_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20variadic_from_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Variadic from diff --git a/module/core/wtools/Readme.md b/module/core/wtools/Readme.md index 172cb4b43d..6b776a16ed 100644 --- a/module/core/wtools/Readme.md +++ b/module/core/wtools/Readme.md @@ -3,6 +3,7 @@ # Module :: wtools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wtools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wtools_push.yml)[![docs.rs](https://img.shields.io/docsrs/wtools?color=e3e8f0&logo=docs.rs)](https://docs.rs/wtools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwtools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wtools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Collection of general purpose tools for solving problems. Fundamentally extend the language without spoiling, so may be used solely or in conjunction with another module of such kind. diff --git a/module/move/crates_tools/Readme.md b/module/move/crates_tools/Readme.md index 0f98a5c504..44e3875f77 100644 --- a/module/move/crates_tools/Readme.md +++ b/module/move/crates_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: crates_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_crates_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_crates_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/crates_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/crates_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fcrates_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20crates_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Tools to analyse crate files. diff --git a/module/move/deterministic_rand/Readme.md b/module/move/deterministic_rand/Readme.md index 137197f55e..01b6b0d8c6 100644 --- a/module/move/deterministic_rand/Readme.md +++ b/module/move/deterministic_rand/Readme.md @@ -3,6 +3,7 @@ [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_deterministic_rand_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_deterministic_rand_push.yml)[![docs.rs](https://img.shields.io/docsrs/deterministic_rand?color=e3e8f0&logo=docs.rs)](https://docs.rs/deterministic_rand)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fdeterministic_rand_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20deterministic_rand_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Hierarchical random number generators for concurrent simulations with switchable determinism. diff --git a/module/move/graphs_tools/Readme.md b/module/move/graphs_tools/Readme.md index 4576ac3e60..2e01fbdf26 100644 --- a/module/move/graphs_tools/Readme.md +++ b/module/move/graphs_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: graphs_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_graphs_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_graphs_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/graphs_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/graphs_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fgraphs_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20graphs_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Graphs tools. diff --git a/module/move/optimization_tools/Readme.md b/module/move/optimization_tools/Readme.md index 29a61e47b0..15db174a1d 100644 --- a/module/move/optimization_tools/Readme.md +++ b/module/move/optimization_tools/Readme.md @@ -3,6 +3,7 @@ # Module :: optimization_tools [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_optimization_tools_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_optimization_tools_push.yml)[![docs.rs](https://img.shields.io/docsrs/optimization_tools?color=e3e8f0&logo=docs.rs)](https://docs.rs/optimization_tools)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Foptimization_tools_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20optimization_tools_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) # Hybrid optimization using Simulated Annealing and Genetic Algorithm diff --git a/module/move/plot_interface/Readme.md b/module/move/plot_interface/Readme.md index de81136c36..fb3ea11556 100644 --- a/module/move/plot_interface/Readme.md +++ b/module/move/plot_interface/Readme.md @@ -3,6 +3,7 @@ # Module :: plot_interface [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_plot_interface_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_plot_interface_push.yml)[![docs.rs](https://img.shields.io/docsrs/plot_interface?color=e3e8f0&logo=docs.rs)](https://docs.rs/plot_interface)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fplot_interface_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20plot_interface_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Plot interface. diff --git a/module/move/refiner/Readme.md b/module/move/refiner/Readme.md index 47b4aecf00..949b13bc54 100644 --- a/module/move/refiner/Readme.md +++ b/module/move/refiner/Readme.md @@ -3,6 +3,7 @@ # Module :: refiner [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_refiner_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_refiner_push.yml)[![docs.rs](https://img.shields.io/docsrs/refiner?color=e3e8f0&logo=docs.rs)](https://docs.rs/refiner)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Frefiner_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20refiner_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Utility to operate files from a command line. diff --git a/module/move/sqlx_query/Readme.md b/module/move/sqlx_query/Readme.md index 7802729278..0f87657952 100644 --- a/module/move/sqlx_query/Readme.md +++ b/module/move/sqlx_query/Readme.md @@ -3,6 +3,7 @@ # Module :: sqlx_query [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_sqlx_query_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_sqlx_query_push.yml)[![docs.rs](https://img.shields.io/docsrs/sqlx_query?color=e3e8f0&logo=docs.rs)](https://docs.rs/sqlx_query)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fsqlx_query_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20sqlx_query_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) The tool to make CLI ( commands user interface ). It is able to aggregate external binary applications, as well as functions, which are written in your language. diff --git a/module/move/unitore/Readme.md b/module/move/unitore/Readme.md index ea2b708413..8683a61d36 100644 --- a/module/move/unitore/Readme.md +++ b/module/move/unitore/Readme.md @@ -2,6 +2,7 @@ # Module :: unitore [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_unitore_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_unitore_push.yml)[![docs.rs](https://img.shields.io/docsrs/unitore?color=e3e8f0&logo=docs.rs)](https://docs.rs/unitore)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Funitore_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20unitore_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Feed reader with the ability to set updates frequency. diff --git a/module/move/wca/Readme.md b/module/move/wca/Readme.md index 81c1a02e20..dfdb626510 100644 --- a/module/move/wca/Readme.md +++ b/module/move/wca/Readme.md @@ -3,6 +3,7 @@ # Module :: wca [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wca_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wca_push.yml)[![docs.rs](https://img.shields.io/docsrs/wca?color=e3e8f0&logo=docs.rs)](https://docs.rs/wca)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwca_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wca_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) The tool to make CLI ( commands user interface ). It is able to aggregate external binary applications, as well as functions, which are written in your language. diff --git a/module/move/willbe/Cargo.toml b/module/move/willbe/Cargo.toml index 5552ab1580..634aa69258 100644 --- a/module/move/willbe/Cargo.toml +++ b/module/move/willbe/Cargo.toml @@ -54,6 +54,7 @@ tracing = { version = "0.1", features = [ "log-always" ], optional = true } tracing-subscriber = { version = "0.3", optional = true } indicatif = { version = "0.17", optional = true } prettytable-rs = "0.10" +serde_json = "1.0" # for CargoMetadata::Package::metadata (need serde_json::Value) ## internal crates_tools = { workspace = true } diff --git a/module/move/willbe/Readme.md b/module/move/willbe/Readme.md index 4dffa8de0d..14493705d1 100644 --- a/module/move/willbe/Readme.md +++ b/module/move/willbe/Readme.md @@ -3,6 +3,7 @@ # Module:: willbe [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_willbe_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_willbe_push.yml)[![docs.rs](https://img.shields.io/docsrs/willbe?color=e3e8f0&logo=docs.rs)](https://docs.rs/willbe)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwillbe_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20willbe_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Utility to publish multi-crate and multi-workspace environments and maintain their consistency. diff --git a/module/move/willbe/src/action/cicd_renew.rs b/module/move/willbe/src/action/cicd_renew.rs index fd010900de..2fa9508c42 100644 --- a/module/move/willbe/src/action/cicd_renew.rs +++ b/module/move/willbe/src/action/cicd_renew.rs @@ -9,8 +9,8 @@ mod private io::{ Write, Read }, collections::BTreeMap }; - use cargo_metadata::Package; - // qqq : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : ✅ use convert_case::{ Casing, Case }; use handlebars::{ RenderError, TemplateError }; @@ -20,6 +20,7 @@ mod private use crate::manifest::private::CrateDirError; use error_tools::for_lib::Error; use error_tools::dependency::*; + use workspace::WorkspacePackage; use wtools::error::for_app::{ Result, Error as wError }; use entity::WorkspaceError; @@ -48,22 +49,23 @@ mod private { let workspace_cache = Workspace::with_crate_dir( AbsolutePath::try_from( base_path )?.try_into()? )?; let packages = workspace_cache.packages()?; - let username_and_repository = &username_and_repository( &workspace_cache.workspace_root()?.join( "Cargo.toml" ).try_into()?, packages )?; + let username_and_repository = &username_and_repository( &workspace_cache.workspace_root()?.join( "Cargo.toml" ).try_into()?, packages.as_slice() )?; let workspace_root = workspace_cache.workspace_root()?; // find directory for workflows let workflow_root = workspace_root.join( ".github" ).join( "workflows" ); // map packages name's to naming standard // aaa : for Petro : avoid calling packages_get twice // aaa : remove it - let names = packages.iter().map( | p | &p.name ).collect::< Vec< _ > >(); + let names = packages.iter().map( | p | p.name() ).collect::< Vec< _ > >(); // map packages path to relative paths fom workspace root, for example D :/work/wTools/module/core/iter_tools => module/core/iter_tools let relative_paths = packages .iter() - .map( | p | &p.manifest_path ) + .map( | p | p.manifest_path() ) .filter_map( | p | p.strip_prefix( workspace_root ).ok() ) .map( | p | p.with_file_name( "" ) ) .collect::< Vec< _ > >(); + dbg!( &relative_paths ); // preparing templates let mut handlebars = handlebars::Handlebars::new(); @@ -211,6 +213,7 @@ mod private Ok( () ) } + #[derive( Debug ) ] struct UsernameAndRepository( String ); // aaa : for Petro : not clear how output should look @@ -224,7 +227,7 @@ mod private /// if not found there, it is then searched in the Cargo.toml file of the module. /// If it is still not found, the search continues in the GitHub remotes. /// Result looks like this: `Wandalen/wTools` - fn username_and_repository( cargo_toml_path : &AbsolutePath, packages: &[Package] ) -> Result< UsernameAndRepository > + fn username_and_repository( cargo_toml_path : &AbsolutePath, packages : &[ WorkspacePackage ] ) -> Result< UsernameAndRepository > { let mut contents = String::new(); File::open( cargo_toml_path )?.read_to_string( &mut contents )?; @@ -248,7 +251,7 @@ mod private let mut url = None; for package in packages { - if let Ok( wu ) = manifest::private::repo_url( package.manifest_path.parent().unwrap().as_std_path() ) + if let Ok( wu ) = manifest::private::repo_url( package.manifest_path().parent().unwrap().as_std_path() ) { url = Some( wu ); break; diff --git a/module/move/willbe/src/action/list.rs b/module/move/willbe/src/action/list.rs index 677705ebbc..2961a3d62d 100644 --- a/module/move/willbe/src/action/list.rs +++ b/module/move/willbe/src/action/list.rs @@ -22,18 +22,19 @@ mod private for_app::{ Error, Context }, err }; - // qqq : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : ✅ use cargo_metadata:: { Dependency, DependencyKind, - Package }; use petgraph::prelude::{ Dfs, EdgeRef }; use former::Former; use workspace::Workspace; use _path::AbsolutePath; + use workspace::WorkspacePackage; /// Args for `list` action. #[ derive( Debug, Default, Copy, Clone ) ] @@ -305,13 +306,13 @@ mod private fn process_package_dependency ( workspace : &Workspace, - package : &Package, + package : &WorkspacePackage, args : &ListOptions, dep_rep : &mut ListNodeReport, visited : &mut HashSet< String > ) { - for dependency in &package.dependencies + for dependency in package.dependencies() { if dependency.path.is_some() && !args.dependency_sources.contains( &DependencySource::Local ) { continue; } if dependency.path.is_none() && !args.dependency_sources.contains( &DependencySource::Remote ) { continue; } @@ -359,7 +360,7 @@ mod private { if let Some( package ) = workspace.package_find_by_manifest( path.as_std_path().join( "Cargo.toml" ) ) { - process_package_dependency( workspace, package, args, &mut dep_rep, visited ); + process_package_dependency( workspace, &package, args, &mut dep_rep, visited ); } } @@ -404,15 +405,15 @@ mod private let package = metadata.package_find_by_manifest( path ).unwrap(); let mut package_report = ListNodeReport { - name : package.name.clone(), - version : if args.info.contains( &PackageAdditionalInfo::Version ) { Some( package.version.to_string() ) } else { None }, - path : if args.info.contains( &PackageAdditionalInfo::Path ) { Some( package.manifest_path.clone().into_std_path_buf() ) } else { None }, + name : package.name().to_string(), + version : if args.info.contains( &PackageAdditionalInfo::Version ) { Some( package.version().to_string() ) } else { None }, + path : if args.info.contains( &PackageAdditionalInfo::Path ) { Some( package.manifest_path().as_std_path().to_path_buf() ) } else { None }, normal_dependencies : vec![], dev_dependencies : vec![], build_dependencies : vec![], }; - process_package_dependency( &metadata, package, &args, &mut package_report, visited ); + process_package_dependency( &metadata, &package, &args, &mut package_report, visited ); *report = match report { @@ -431,10 +432,10 @@ mod private ListFormat::Tree => { let packages = metadata.packages().context( "workspace packages" ).err_with( report.clone() )?; - let mut visited = packages.iter().map( | p | format!( "{}+{}+{}", p.name, p.version.to_string(), p.manifest_path ) ).collect(); + let mut visited = packages.iter().map( | p | format!( "{}+{}+{}", p.name(), p.version().to_string(), p.manifest_path() ) ).collect(); for package in packages { - tree_package_report( package.manifest_path.as_path().try_into().unwrap(), &mut report, &mut visited ) + tree_package_report( package.manifest_path().as_std_path().try_into().unwrap(), &mut report, &mut visited ) } } ListFormat::Topological => @@ -446,7 +447,7 @@ mod private .map( | m | m[ "name" ].to_string().trim().replace( '\"', "" ) ) .unwrap_or_default(); - let dep_filter = move | _p : &Package, d : &Dependency | + let dep_filter = move | _p : &WorkspacePackage, d : &Dependency | { ( args.dependency_categories.contains( &DependencyCategory::Primary ) && d.kind == DependencyKind::Normal @@ -463,14 +464,14 @@ mod private let packages = metadata.packages().context( "workspace packages" ).err_with( report.clone() )?; let packages_map = packages::filter ( - packages, + packages.as_slice(), FilterMapOptions{ dependency_filter : Some( Box::new( dep_filter ) ), ..Default::default() } ); let graph = graph::construct( &packages_map ); let sorted = toposort( &graph, None ).map_err( | e | { use std::ops::Index; ( report.clone(), err!( "Failed to process toposort for package : {:?}", graph.index( e.node_id() ) ) ) } )?; - let packages_info = packages.iter().map( | p | ( p.name.clone(), p ) ).collect::< HashMap< _, _ > >(); + let packages_info = packages.iter().map( | p | ( p.name().clone(), p ) ).collect::< HashMap< _, _ > >(); if root_crate.is_empty() { @@ -487,12 +488,12 @@ mod private if args.info.contains( &PackageAdditionalInfo::Version ) { name.push_str( " " ); - name.push_str( &p.version.to_string() ); + name.push_str( &p.version().to_string() ); } if args.info.contains( &PackageAdditionalInfo::Path ) { name.push_str( " " ); - name.push_str( &p.manifest_path.to_string() ); + name.push_str( &p.manifest_path().to_string() ); } } name @@ -531,12 +532,12 @@ mod private if args.info.contains( &PackageAdditionalInfo::Version ) { name.push_str( " " ); - name.push_str( &p.version.to_string() ); + name.push_str( &p.version().to_string() ); } if args.info.contains( &PackageAdditionalInfo::Path ) { name.push_str( " " ); - name.push_str( &p.manifest_path.to_string() ); + name.push_str( &p.manifest_path().to_string() ); } } names.push( name ); diff --git a/module/move/willbe/src/action/mod.rs b/module/move/willbe/src/action/mod.rs index 08c634878f..03d817fc44 100644 --- a/module/move/willbe/src/action/mod.rs +++ b/module/move/willbe/src/action/mod.rs @@ -8,6 +8,8 @@ crate::mod_interface! layer main_header; /// Publish packages. layer publish; + /// Return the differences between a local and remote package versions. + layer publish_diff; /// Generates health table in main Readme.md file of workspace. // aaa : for Petro : give high quality explanations // aaa : add more details to description diff --git a/module/move/willbe/src/action/publish.rs b/module/move/willbe/src/action/publish.rs index 5c6180880d..9eb9162858 100644 --- a/module/move/willbe/src/action/publish.rs +++ b/module/move/willbe/src/action/publish.rs @@ -146,10 +146,10 @@ mod private let packages = metadata.load().err_with( || report.clone() )?.packages().err_with( || report.clone() )?; let packages_to_publish : Vec< _ > = packages .iter() - .filter( | &package | paths.contains( &AbsolutePath::try_from( package.manifest_path.as_std_path().parent().unwrap() ).unwrap() ) ) - .map( | p | p.name.clone() ) + .filter( | &package | paths.contains( &AbsolutePath::try_from( package.manifest_path().as_std_path().parent().unwrap() ).unwrap() ) ) + .map( | p | p.name().clone() ) .collect(); - let package_map = packages.into_iter().map( | p | ( p.name.clone(), Package::from( p.clone() ) ) ).collect::< HashMap< _, _ > >(); + let package_map = packages.into_iter().map( | p | ( p.name().clone(), Package::from( p.clone() ) ) ).collect::< HashMap< _, _ > >(); { for node in &packages_to_publish { diff --git a/module/move/willbe/src/action/publish_diff.rs b/module/move/willbe/src/action/publish_diff.rs new file mode 100644 index 0000000000..d8f648aba7 --- /dev/null +++ b/module/move/willbe/src/action/publish_diff.rs @@ -0,0 +1,38 @@ +/// Internal namespace. +mod private +{ + use crate::*; + + use std::path::PathBuf; + use crates_tools::CrateArchive; + + use _path::AbsolutePath; + use wtools::error::for_app::Result; + use diff::{ DiffReport, crate_diff }; + + /// Return the differences between a local and remote package versions. + #[ cfg_attr( feature = "tracing", tracing::instrument ) ] + pub fn publish_diff( path : PathBuf ) -> Result< DiffReport > + { + let path = AbsolutePath::try_from( path )?; + let dir = CrateDir::try_from( path )?; + + let package = package::Package::try_from( dir.clone() )?; + let name = &package.name()?; + let version = &package.version()?; + + _ = cargo::pack( cargo::PackOptions::former().path( dir.as_ref() ).dry( false ).form() )?; + let l = CrateArchive::read( packed_crate::local_path( name, version, dir )? )?; + let r = CrateArchive::download_crates_io( name, version ).unwrap(); + + Ok( crate_diff( &l, &r ) ) + } +} + +// + +crate::mod_interface! +{ + /// Publishes the difference between the local and published versions of a package. + orphan use publish_diff; +} diff --git a/module/move/willbe/src/action/readme_health_table_renew.rs b/module/move/willbe/src/action/readme_health_table_renew.rs index 6e044b006c..5c28081b75 100644 --- a/module/move/willbe/src/action/readme_health_table_renew.rs +++ b/module/move/willbe/src/action/readme_health_table_renew.rs @@ -14,9 +14,10 @@ mod private { Dependency, DependencyKind, - Package }; - // qqq : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : ✅ + use convert_case::{ Case, Casing }; use toml_edit::Document; @@ -37,6 +38,7 @@ mod private use manifest::private::repo_url; use workspace::Workspace; use _path::AbsolutePath; + use workspace::WorkspacePackage; static TAG_TEMPLATE: std::sync::OnceLock< Regex > = std::sync::OnceLock::new(); static CLOSE_TAG: std::sync::OnceLock< Regex > = std::sync::OnceLock::new(); @@ -326,18 +328,18 @@ mod private } /// Return topologically sorted modules name, from packages list, in specified directory. - fn directory_names( path : PathBuf, packages : &[ Package ] ) -> Result< Vec< String > > + fn directory_names( path : PathBuf, packages : &[ WorkspacePackage ] ) -> Result< Vec< String > > { let path_clone = path.clone(); - let module_package_filter: Option< Box< dyn Fn( &Package ) -> bool > > = Some + let module_package_filter: Option< Box< dyn Fn( &WorkspacePackage ) -> bool > > = Some ( Box::new ( move | p | - p.publish.is_none() && p.manifest_path.starts_with( &path ) + p.publish().is_none() && p.manifest_path().starts_with( &path ) ) ); - let module_dependency_filter: Option< Box< dyn Fn( &Package, &Dependency) -> bool > > = Some + let module_dependency_filter: Option< Box< dyn Fn( &WorkspacePackage, &Dependency) -> bool > > = Some ( Box::new ( diff --git a/module/move/willbe/src/action/readme_modules_headers_renew.rs b/module/move/willbe/src/action/readme_modules_headers_renew.rs index 15370e90e7..4d53eec2c9 100644 --- a/module/move/willbe/src/action/readme_modules_headers_renew.rs +++ b/module/move/willbe/src/action/readme_modules_headers_renew.rs @@ -109,7 +109,7 @@ mod private regexes_initialize(); let cargo_metadata = Workspace::with_crate_dir( CrateDir::try_from( path )? )?; let discord_url = cargo_metadata.discord_url()?; - for path in cargo_metadata.packages()?.into_iter().filter_map( | p | AbsolutePath::try_from( p.manifest_path.clone() ).ok()) + for path in cargo_metadata.packages()?.into_iter().filter_map( | p | AbsolutePath::try_from( p.manifest_path() ).ok()) { let read_me_path = path .parent() diff --git a/module/move/willbe/src/action/test.rs b/module/move/willbe/src/action/test.rs index 89330ce821..3f9bd57009 100644 --- a/module/move/willbe/src/action/test.rs +++ b/module/move/willbe/src/action/test.rs @@ -10,10 +10,10 @@ mod private use std::{ env, fs }; // qqq : for Petro : https://github.com/obox-systems/conventions/blob/master/code_style.md#importing-structuring-std-imports - use cargo_metadata::Package; #[ cfg( feature = "progress_bar" ) ] use indicatif::{ MultiProgress, ProgressStyle }; - // qqq : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : ✅ // qqq : for Petro : don't use Package directly. rid it off for the whole willbe @@ -55,6 +55,7 @@ mod private }, iter::Itertools, }; + use workspace::WorkspacePackage; /// Used to store arguments for running tests. /// @@ -208,7 +209,7 @@ mod private result } - fn needed_packages( path : AbsolutePath ) -> Result< Vec< Package > > + fn needed_packages( path : AbsolutePath ) -> Result< Vec< WorkspacePackage > > { let path = if path.as_ref().file_name() == Some( "Cargo.toml".as_ref() ) { @@ -223,8 +224,7 @@ mod private let result = metadata .packages()? .into_iter() - .cloned() - .filter( move | x | x.manifest_path.starts_with( path.as_ref() ) ) + .filter( move | x | x.manifest_path().starts_with( path.as_ref() ) ) .collect(); Ok( result ) } diff --git a/module/move/willbe/src/command/mod.rs b/module/move/willbe/src/command/mod.rs index 08cf29ba2a..384d1540f4 100644 --- a/module/move/willbe/src/command/mod.rs +++ b/module/move/willbe/src/command/mod.rs @@ -34,6 +34,17 @@ pub( crate ) mod private .routine( command::publish ) .end() + .command( "publish.diff" ) + .hint( "Display the differences between a local and remote package versions." ) + .long_hint( "Following this command, you will immediately get a comparison between the local and remote packages. It looks at each file, identifying those added, removed, or modified. A full report will then be generated where you can quickly and easily see the differences." ) + .subject() + .hint( "Provide path to the package that you want to check.\n\t The path should point to a directory that contains a `Cargo.toml` file." ) + .kind( Type::Path ) + .optional( true ) + .end() + .routine( command::publish_diff ) + .end() + .command( "list" ) .hint( "list packages from a directory" ) .long_hint( "generates a list of packages based on the provided directory path. The directory must contain a `Cargo.toml` file." ) @@ -237,6 +248,8 @@ crate::mod_interface! layer list; /// Publish packages. layer publish; + /// Used to compare local and published versions of a specific package. + layer publish_diff; /// Generates health table in main Readme.md file of workspace. // aaa : for Petro : what a table?? // aaa : add more details to documentation diff --git a/module/move/willbe/src/command/publish_diff.rs b/module/move/willbe/src/command/publish_diff.rs new file mode 100644 index 0000000000..baedd83605 --- /dev/null +++ b/module/move/willbe/src/command/publish_diff.rs @@ -0,0 +1,39 @@ +mod private +{ + use crate::*; + + use std::path::PathBuf; + use wca::Args; + + use wtools::error::Result; + + /// Command to display the differences between a local and remote package versions. + /// + /// # Arguments + /// + /// * `args` - Command line arguments. + /// + /// # Returns + /// + /// Returns a `Result` indicating success or failure. + /// + /// # Errors + /// + /// Returns an error if there is an issue with the command. + pub fn publish_diff( args : Args ) -> Result< () > + { + let path : PathBuf = args.get_owned( 0 ).unwrap_or( std::env::current_dir()? ); + + println!( "{}", action::publish_diff( path )? ); + + Ok( () ) + } +} + +// + +crate::mod_interface! +{ + /// Publishes the difference between the local and published versions of a package. + orphan use publish_diff; +} diff --git a/module/move/willbe/src/command/test.rs b/module/move/willbe/src/command/test.rs index bb8a22d4f1..9f418ed2a9 100644 --- a/module/move/willbe/src/command/test.rs +++ b/module/move/willbe/src/command/test.rs @@ -5,15 +5,58 @@ mod private use std::collections::HashSet; use std::path::PathBuf; - use wca::{ Args, Props }; + use wca:: + { + Args, + Props, + Value, + }; use wtools::error::Result; use _path::AbsolutePath; use action::test::TestsCommandOptions; use former::Former; use channel::Channel; use error_tools::for_app::bail; + use iter_tools::Itertools; use optimization::Optimization; + trait ToString + { + fn to_string( &self ) -> String; + } + + + impl ToString for Value + { + fn to_string( &self ) -> String + { + match self + { + Value::String( s ) => + { + format!( "{s}" ) + } + Value::Number( n ) => + { + format!( "{n}" ) + } + Value::Path( p ) => + { + format!( "{}", p.display() ) + } + Value::Bool( b ) => + { + format!( "{b}" ) + } + Value::List( list ) => + { + let list = list.iter().map( | element | element.to_string() ).join( ", "); // qqq : don't hardcode ", " find way to get original separator + format!( "{list}" ) + } + } + } + } + #[ derive( Former, Debug ) ] struct TestsProperties { @@ -48,6 +91,8 @@ mod private /// run tests in specified crate pub fn test( args : Args, properties : Props ) -> Result< () > { + let args_line = format!( "{}", args.get_owned( 0 ).unwrap_or( "" ) ); + let prop_line = format!( "{}", properties.iter().map( | p | format!( "{}:{}", p.0, p.1.to_string() ) ).collect::< Vec< _ > >().join(" ") ); let path : PathBuf = args.get_owned( 0 ).unwrap_or_else( || "./".into() ); let path = AbsolutePath::try_from( path )?; let TestsProperties @@ -99,10 +144,18 @@ mod private match action::test( args, dry ) { + Ok( report ) => { - println!( "{report} "); - + if dry + { + print!( "You can execute the plan with 'will .test {} dry:0 {}'.", args_line.trim(), prop_line.trim() ); + } + else + { + println!( "{report} "); + } + Ok( () ) } Err( ( report, e ) ) => @@ -121,7 +174,7 @@ mod private let mut this = Self::former(); this = if let Some( v ) = value.get_owned( "dry" ) { this.dry::< bool >( v ) } else { this }; - this = if let Some( v ) = value.get_owned( "temp" ) { this.dry::< bool >( v ) } else { this }; + this = if let Some( v ) = value.get_owned( "temp" ) { this.temp::< bool >( v ) } else { this }; this = if let Some( v ) = value.get_owned( "with_stable" ) { this.with_stable::< bool >( v ) } else { this }; this = if let Some( v ) = value.get_owned( "with_nightly" ) { this.with_nightly::< bool >( v ) } else { this }; this = if let Some( v ) = value.get_owned( "concurrent" ) { this.concurrent::< u32 >( v ) } else { this }; diff --git a/module/move/willbe/src/entity/diff.rs b/module/move/willbe/src/entity/diff.rs new file mode 100644 index 0000000000..27c39543ff --- /dev/null +++ b/module/move/willbe/src/entity/diff.rs @@ -0,0 +1,113 @@ +mod private +{ + use crate::*; + + use std:: + { + collections::HashSet, + fmt::Formatter, + path::PathBuf, + }; + use colored::Colorize; + use crates_tools::CrateArchive; + + use wtools::iter::Itertools; + + /// The `Diff` enum is designed to represent differences between two versions + /// of some kind of item identified. + #[ derive( Debug ) ] + pub enum Diff< T > + { + /// This variant represents items that are identical or same in both versions. + Same( T ), + /// This variant represents items that exists in both versions but have been modified. + Modified( T ), + /// This variant represents items that were added. + Add( T ), + /// This variant represents items that were removed. + Rem( T ), + } + + /// The `DiffReport` struct represents a diff report containing a list of `Diff` objects. + #[ derive( Debug, Default ) ] + pub struct DiffReport( Vec< Diff< PathBuf > > ); + + impl std::fmt::Display for DiffReport + { + fn fmt( &self, f : &mut Formatter< '_ > ) -> std::fmt::Result + { + for diff in self.0.iter() + .sorted_by_key( | d | match d { Diff::Modified( df ) | Diff::Same( df ) | Diff::Rem( df ) | Diff::Add( df ) => df } ) + { + match diff + { + Diff::Same( t ) => writeln!( f, "{}", t.display() )?, + Diff::Modified( t ) => writeln!( f, "~ {}", t.to_string_lossy().yellow() )?, + Diff::Add( t ) => writeln!( f, "+ {}", t.to_string_lossy().green() )?, + Diff::Rem( t ) => writeln!( f, "- {}", t.to_string_lossy().red() )?, + }; + } + + Ok( () ) + } + } + + /// Compare two crate archives and create a difference report. + /// + /// # Arguments + /// + /// * `left` - A reference to the left crate archive. + /// * `right` - A reference to the right crate archive. + /// + /// # Returns + /// + /// A `DiffReport` struct representing the difference between the two crate archives. + pub fn crate_diff( left : &CrateArchive, right : &CrateArchive ) -> DiffReport + { + let mut report = DiffReport::default(); + + let local_package_files : HashSet< _ > = left.list().into_iter().collect(); + let remote_package_files : HashSet< _ > = right.list().into_iter().collect(); + + let local_only = local_package_files.difference( &remote_package_files ); + let remote_only = remote_package_files.difference( &local_package_files ); + let both = local_package_files.intersection( &remote_package_files ); + + for &path in local_only + { + report.0.push( Diff::Add( path.to_path_buf() ) ); + } + + for &path in remote_only + { + report.0.push( Diff::Rem( path.to_path_buf() ) ); + } + + for &path in both + { + // unwraps are safe because the paths to the files was compared previously + let local = left.content_bytes( path ).unwrap(); + let remote = right.content_bytes( path ).unwrap(); + + if local == remote + { + report.0.push( Diff::Same( path.to_path_buf() ) ); + } + else + { + report.0.push( Diff::Modified( path.to_path_buf() ) ); + } + } + + report + } +} + +// + +crate::mod_interface! +{ + protected use Diff; + protected use DiffReport; + protected use crate_diff; +} \ No newline at end of file diff --git a/module/move/willbe/src/entity/features.rs b/module/move/willbe/src/entity/features.rs index f47e95fb5b..3099f8fbd9 100644 --- a/module/move/willbe/src/entity/features.rs +++ b/module/move/willbe/src/entity/features.rs @@ -2,10 +2,11 @@ mod private { use crate::*; use std::collections::{ BTreeSet, HashSet }; - use cargo_metadata::Package; - // qqq : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : for Petro : don't use cargo_metadata and Package directly, use facade + // aaa : ✅ use error_tools::for_app::{ bail, Result }; use wtools::iter::Itertools; + use workspace::WorkspacePackage; /// Generates a powerset of the features available in the given `package`, /// filtered according to specified inclusion and exclusion criteria, @@ -46,7 +47,7 @@ mod private pub fn features_powerset ( - package : &Package, + package : &WorkspacePackage, power : usize, exclude_features : &[ String ], include_features : &[ String ], @@ -60,13 +61,13 @@ mod private let mut features_powerset = HashSet::new(); let filtered_features : BTreeSet< _ > = package - .features + .features() .keys() .filter( | f | !exclude_features.contains( f ) && (include_features.contains(f) || include_features.is_empty()) ) .cloned() .collect(); - if esimate_with( filtered_features.len(), power, with_all_features, with_none_features, enabled_features, package.features.len() ) > variants_cap as usize + if esimate_with( filtered_features.len(), power, with_all_features, with_none_features, enabled_features, package.features().len() ) > variants_cap as usize { bail!( "Feature powerset longer then cap." ) } diff --git a/module/move/willbe/src/entity/mod.rs b/module/move/willbe/src/entity/mod.rs index 6073c0fa94..5a0be78e1f 100644 --- a/module/move/willbe/src/entity/mod.rs +++ b/module/move/willbe/src/entity/mod.rs @@ -1,6 +1,10 @@ crate::mod_interface! { + /// Compare two crate archives and create a difference report. + layer diff; + orphan use super::diff; + /// Operation with features layer features; orphan use super::features; diff --git a/module/move/willbe/src/entity/package.rs b/module/move/willbe/src/entity/package.rs index 188e19da10..b9794b4d82 100644 --- a/module/move/willbe/src/entity/package.rs +++ b/module/move/willbe/src/entity/package.rs @@ -10,7 +10,7 @@ mod private use std::fmt::Formatter; use std::hash::Hash; use std::path::PathBuf; - use cargo_metadata::{ Dependency, DependencyKind, Package as PackageMetadata }; + use cargo_metadata::{ Dependency, DependencyKind }; use toml_edit::value; use process_tools::process; @@ -34,6 +34,7 @@ mod private }; use action::readme_health_table_renew::Stability; use former::Former; + use workspace::WorkspacePackage; /// #[ derive( Debug ) ] @@ -42,7 +43,7 @@ mod private /// `Cargo.toml` file. Manifest( Manifest ), /// Cargo metadata package. - Metadata( PackageMetadata ), + Metadata( WorkspacePackage ), } /// Represents errors related to package handling. @@ -87,6 +88,22 @@ mod private } } + impl TryFrom< CrateDir > for Package + { + type Error = PackageError; + + fn try_from( value : CrateDir ) -> Result< Self, Self::Error > + { + let manifest = manifest::open( value.absolute_path().join( "Cargo.toml" ) )?; + if !manifest.package_is()? + { + return Err( PackageError::NotAPackage ); + } + + Ok( Self::Manifest( manifest ) ) + } + } + impl TryFrom< Manifest > for Package { // qqq : make better errors @@ -104,9 +121,9 @@ mod private } } - impl From< PackageMetadata > for Package + impl From< WorkspacePackage > for Package { - fn from( value : PackageMetadata ) -> Self + fn from( value : WorkspacePackage ) -> Self { Self::Metadata( value ) } @@ -120,7 +137,7 @@ mod private match self { Self::Manifest( manifest ) => manifest.manifest_path.clone(), - Self::Metadata( metadata ) => AbsolutePath::try_from( metadata.manifest_path.as_std_path().to_path_buf() ).unwrap(), + Self::Metadata( metadata ) => AbsolutePath::try_from( metadata.manifest_path().as_std_path().to_path_buf() ).unwrap(), } } @@ -132,7 +149,7 @@ mod private Self::Manifest( manifest ) => manifest.crate_dir(), Self::Metadata( metadata ) => { - let path = metadata.manifest_path.parent().unwrap().as_std_path().to_path_buf(); + let path = metadata.manifest_path().parent().unwrap().as_std_path().to_path_buf(); let absolute = AbsolutePath::try_from( path ).unwrap(); CrateDir::try_from( absolute ).unwrap() @@ -154,7 +171,7 @@ mod private } Self::Metadata( metadata ) => { - Ok( metadata.name.clone() ) + Ok( metadata.name().clone() ) } } } @@ -173,7 +190,7 @@ mod private } Self::Metadata( metadata ) => { - Ok( metadata.version.to_string() ) + Ok( metadata.version().to_string() ) } } } @@ -192,7 +209,7 @@ mod private } Self::Metadata( metadata ) => { - Ok( metadata.metadata["stability"].as_str().and_then( | s | s.parse::< Stability >().ok() ).unwrap_or( Stability::Experimental) ) + Ok( metadata.metadata()["stability"].as_str().and_then( | s | s.parse::< Stability >().ok() ).unwrap_or( Stability::Experimental) ) } } } @@ -211,7 +228,7 @@ mod private } Self::Metadata( metadata ) => { - Ok( metadata.repository.clone() ) + Ok( metadata.repository().cloned() ) } } } @@ -229,7 +246,7 @@ mod private } Self::Metadata( metadata ) => { - Ok( metadata.metadata[ "discord_url" ].as_str().map( | url | url.to_string() ) ) + Ok( metadata.metadata()[ "discord_url" ].as_str().map( | url | url.to_string() ) ) } } } @@ -246,7 +263,7 @@ mod private } Self::Metadata( metadata ) => { - Ok( !( metadata.publish.is_none() || metadata.publish.as_ref().is_some_and( | p | p.is_empty() ) ) ) + Ok( !( metadata.publish().is_none() || metadata.publish().as_ref().is_some_and( | p | p.is_empty() ) ) ) } } } @@ -259,21 +276,20 @@ mod private Package::Manifest( manifest ) => Ok( manifest.clone() ), Package::Metadata( metadata ) => manifest::open ( - AbsolutePath::try_from( metadata.manifest_path.as_path() ).map_err( | _ | PackageError::LocalPath )? ) + AbsolutePath::try_from( metadata.manifest_path() ).map_err( | _ | PackageError::LocalPath )? ) .map_err( | _ | PackageError::Metadata ), } } /// Returns the `Metadata` - pub fn metadata( &self ) -> Result< PackageMetadata, PackageError > + pub fn metadata( &self ) -> Result< WorkspacePackage, PackageError > { match self { Package::Manifest( manifest ) => Workspace::with_crate_dir( manifest.crate_dir() ).map_err( | _ | PackageError::Metadata )? .package_find_by_manifest( &manifest.manifest_path ) - .ok_or_else( || PackageError::Metadata ) - .cloned(), + .ok_or_else( || PackageError::Metadata ), Package::Metadata( metadata ) => Ok( metadata.clone() ), } } @@ -570,14 +586,14 @@ mod private pub path : Option< AbsolutePath >, } - impl From< &PackageMetadata > for CrateId + impl From< &WorkspacePackage > for CrateId { - fn from( value : &PackageMetadata ) -> Self + fn from( value : &WorkspacePackage ) -> Self { Self { - name : value.name.clone(), - path : Some( AbsolutePath::try_from( value.manifest_path.parent().unwrap() ).unwrap() ), + name : value.name().clone(), + path : Some( AbsolutePath::try_from( value.manifest_path().parent().unwrap() ).unwrap() ), } } } @@ -620,13 +636,13 @@ mod private .ok_or( format_err!( "Package not found in the workspace with path : `{}`", manifest_path.as_ref().display() ) )?; let deps = package - .dependencies + .dependencies() .iter() .filter( | dep | ( with_remote || dep.path.is_some() ) && ( with_dev || dep.kind != DependencyKind::Development ) ) .map( CrateId::from ) .collect::< HashSet< _ > >(); - let package = CrateId::from( package ); + let package = CrateId::from( &package ); graph.insert( package.clone(), deps.clone() ); if recursive @@ -744,7 +760,6 @@ mod private Ok( !is_same ) } - } // diff --git a/module/move/willbe/src/entity/packages.rs b/module/move/willbe/src/entity/packages.rs index 670c116dbb..671770d40b 100644 --- a/module/move/willbe/src/entity/packages.rs +++ b/module/move/willbe/src/entity/packages.rs @@ -1,11 +1,13 @@ mod private { + use crate::*; use std:: { fmt::Formatter, collections::{ HashMap, HashSet }, }; - use cargo_metadata::{ Dependency, Package as PackageMetadata }; + use cargo_metadata::{ Dependency }; + use workspace::WorkspacePackage; /// Type aliasing for String pub type PackageName = String; @@ -20,13 +22,13 @@ mod private /// applied to each package, and only packages that satisfy the condition /// are included in the final result. If not provided, a default filter that /// accepts all packages is used. - pub package_filter : Option< Box< dyn Fn( &PackageMetadata ) -> bool > >, + pub package_filter : Option< Box< dyn Fn( &WorkspacePackage ) -> bool > >, /// An optional dependency filtering function. If provided, this function /// is applied to each dependency of each package, and only dependencies /// that satisfy the condition are included in the final result. If not /// provided, a default filter that accepts all dependencies is used. - pub dependency_filter : Option< Box< dyn Fn( &PackageMetadata, &Dependency ) -> bool > >, + pub dependency_filter : Option< Box< dyn Fn( &WorkspacePackage, &Dependency ) -> bool > >, } impl std::fmt::Debug for FilterMapOptions @@ -71,7 +73,7 @@ mod private // qqq : for Bohdan : for Petro : bad. don't use PackageMetadata directly, use its abstraction only! - pub fn filter( packages : &[ PackageMetadata ], options : FilterMapOptions ) -> HashMap< PackageName, HashSet< PackageName > > + pub fn filter( packages : &[ WorkspacePackage ], options : FilterMapOptions ) -> HashMap< PackageName, HashSet< PackageName > > { let FilterMapOptions { package_filter, dependency_filter } = options; let package_filter = package_filter.unwrap_or_else( || Box::new( | _ | true ) ); @@ -83,8 +85,8 @@ mod private ( | package | ( - package.name.clone(), - package.dependencies + package.name().clone(), + package.dependencies() .iter() .filter( | &d | dependency_filter( package, d ) ) .map( | d | d.name.clone() ) diff --git a/module/move/willbe/src/entity/test.rs b/module/move/willbe/src/entity/test.rs index 0c36f5a9f3..6b154b42a0 100644 --- a/module/move/willbe/src/entity/test.rs +++ b/module/move/willbe/src/entity/test.rs @@ -16,8 +16,8 @@ mod private use std::fmt::{ Debug, Display }; use std::marker::PhantomData; use std::path::PathBuf; - use cargo_metadata::Package; - // qqq : for Petro : don't use cargo_metadata directly, use facade + // aaa : for Petro : don't use cargo_metadata directly, use facade + // aaa : ✅ use colored::Colorize; // qqq : for Petro : don't do micro imports use prettytable:: @@ -48,6 +48,7 @@ mod private use former::Former; use channel::Channel; use optimization::Optimization; + use workspace::WorkspacePackage; /// Newtype for package name #[ derive( Debug, Default, Clone ) ] @@ -110,7 +111,7 @@ mod private /// `variants_cap` - Maximum of subset in powerset pub fn try_from ( - packages : &[ Package ], + packages : &[ WorkspacePackage ], channels : &HashSet< Channel >, power : u32, include_features : Vec< String >, @@ -152,6 +153,7 @@ mod private #[ derive( Debug ) ] pub struct TestPackagePlan { + enabled_features : BTreeSet< String >, package : PathBuf, test_variants : BTreeSet< TestVariant >, } @@ -161,9 +163,6 @@ mod private fn fmt( &self, f : &mut Formatter< '_ >) -> std::fmt::Result { writeln!( f, "Package : {}\nThe tests will be executed using the following configurations :", self.package.file_name().unwrap().to_string_lossy() )?; - let mut table = Table::new(); - let format = format(); - table.set_format( format ); let mut all_features = BTreeSet::new(); for variant in &self.test_variants { @@ -174,10 +173,23 @@ mod private } all_features.extend( features ); } + let mut ff = Vec::from_iter( self.enabled_features.iter().cloned() ); + for feature in all_features + { + if !ff.contains( &feature ) + { + ff.push( feature ); + } + } + let mut table = Table::new(); + let format = format(); + table.set_format( format ); + let mut header_row = Row::empty(); header_row.add_cell( Cell::new( "Channel" ) ); header_row.add_cell( Cell::new( "Opt" ) ); - for feature in &all_features + + for feature in &ff { header_row.add_cell( Cell::new( feature ) ); } @@ -189,26 +201,9 @@ mod private row.add_cell( Cell::new( &variant.channel.to_string() ) ); row.add_cell( Cell::new( &variant.optimization.to_string() ) ); - let mut a = true; - for feature in &all_features - { - let mut c = Cell::new( "+" ); - c.align( Alignment::CENTER ); - if variant.features.is_empty() && a - { - a = false; - row.add_cell( c ); - } - else if variant.features.contains( feature ) - { - row.add_cell( c ); - } - else - { - c = Cell::new( "" ); - row.add_cell( c ); - } - } + let counter = 0; + let flag = true; + generate_features_cells(&mut ff, variant, &mut row, counter, flag, &self.enabled_features ); table.add_row( row ); } @@ -234,7 +229,7 @@ mod private /// `variants_cap` - Maximum of subset in powerset fn try_from ( - package : &Package, + package : &WorkspacePackage, channels : &HashSet< Channel >, power : u32, include_features : &[ String ], @@ -246,7 +241,7 @@ mod private variants_cap : u32, ) -> Result< Self > { - let dir = package.manifest_path.parent().unwrap().as_std_path().to_path_buf(); + let dir = package.manifest_path().parent().unwrap().as_std_path().to_path_buf(); let mut test_variants = BTreeSet::new(); let features_powerset = features::features_powerset ( @@ -281,6 +276,7 @@ mod private ( Self { + enabled_features: enabled_features.iter().cloned().collect(), package : dir, test_variants, } @@ -288,6 +284,30 @@ mod private } } + fn generate_features_cells( ff : &mut Vec< String >, variant : &TestVariant, row : &mut Row, mut counter : usize, mut flag : bool, enabled_features : &BTreeSet< String > ) + { + for feature in ff + { + let mut c = Cell::new("+"); + c.align( Alignment::CENTER ); + if variant.features.is_empty() && counter == enabled_features.len() && flag + { + flag = false; + row.add_cell( c ); + } + else if variant.features.contains( feature ) + { + row.add_cell( c ); + } + else + { + c = Cell::new( "" ); + row.add_cell( c ); + } + counter += 1; + } + } + fn format() -> TableFormat { let format = FormatBuilder::new() @@ -513,6 +533,8 @@ mod private /// feature names and the values are `Report` structs representing the test results for /// the specific feature and channel. pub tests : BTreeMap< TestVariant, Result< Report, Report > > , + /// Enabled features + pub enabled_features : BTreeSet< String >, // qqq : for Petro : rid off map of map of map, keep flat map } @@ -524,9 +546,8 @@ mod private { return Ok( () ) } - let mut table = Table::new(); - let format = format(); - table.set_format( format ); + let mut failed = 0; + let mut success = 0; let mut all_features = BTreeSet::new(); for variant in self.tests.keys() { @@ -537,18 +558,27 @@ mod private } all_features.extend( features ); } + let mut ff = Vec::from_iter( self.enabled_features.iter().cloned() ); + for feature in all_features + { + if !ff.contains( &feature ) + { + ff.push( feature ); + } + } + let mut table = Table::new(); + let format = format(); + table.set_format( format ); let mut header_row = Row::empty(); header_row.add_cell( Cell::new( "Result" ) ); header_row.add_cell( Cell::new( "Channel" ) ); header_row.add_cell( Cell::new( "Opt" ) ); - for feature in &all_features + for feature in &ff { header_row.add_cell( Cell::new( feature ) ); } table.set_titles( header_row ); - - let mut failed = 0; - let mut success = 0; + writeln!( f, "{} {}\n", "\n=== Module".bold(), self.package_name.0.bold() )?; if self.tests.is_empty() { @@ -577,26 +607,10 @@ mod private row.add_cell( Cell::new( result_text ) ); row.add_cell( Cell::new( &variant.channel.to_string() ) ); row.add_cell( Cell::new( &variant.optimization.to_string() ) ); - let mut a = true; - for feature in &all_features - { - let mut c = Cell::new( "+" ); - c.align( Alignment::CENTER ); - if variant.features.is_empty() && a - { - a = false; - row.add_cell( c ); - } - else if variant.features.contains( feature ) - { - row.add_cell( c ); - } - else - { - c = Cell::new( "" ); - row.add_cell( c ); - } - } + let counter = 0; + let flag = true; + generate_features_cells( &mut ff, variant, &mut row, counter, flag, &self.enabled_features ); + table.add_row( row ); } @@ -687,6 +701,7 @@ mod private { let mut report = TestReport::default(); report.dry = options.dry; + report.enabled_features = options.plan.enabled_features.clone(); let report = Arc::new( Mutex::new( report ) ); let dir = options.plan.package.clone(); diff --git a/module/move/willbe/src/entity/workspace.rs b/module/move/willbe/src/entity/workspace.rs index 5bb73332b3..816ecc1d24 100644 --- a/module/move/willbe/src/entity/workspace.rs +++ b/module/move/willbe/src/entity/workspace.rs @@ -1,13 +1,111 @@ mod private { + use std::collections::BTreeMap; use crate::*; use std::path::Path; - use cargo_metadata::{ Metadata, MetadataCommand, Package }; + use cargo_metadata::{ Dependency, Metadata, MetadataCommand, Package }; + use cargo_metadata::camino::Utf8Path; use petgraph::Graph; + use semver::Version; + use serde_json::Value; use wtools::error::{ for_app::Context, for_lib::Error, Result }; use _path::AbsolutePath; + /// Facade for cargo_metadata::Package + #[ derive( Debug, Clone ) ] + pub struct WorkspacePackage + { + inner : Package + } + + impl From< Package > for WorkspacePackage + { + fn from( inner : Package) -> Self + { + Self + { + inner + } + } + } + + impl WorkspacePackage + { + /// The name field as given in the Cargo.toml + pub fn name( &self ) -> &String + { + &self.inner.name + } + + /// List of dependencies of this particular package + pub fn dependencies( &self ) -> &[ Dependency ] + { + self.inner.dependencies.as_slice() + } + + /// Path containing the Cargo.toml + pub fn manifest_path( &self ) -> &Utf8Path + { + self.inner.manifest_path.as_path() + } + + /// The version field as specified in the Cargo.toml + pub fn version( &self ) -> Version + { + self.inner.version.clone() + } + + /// List of registries to which this package may be published (derived from the publish field). + /// Publishing is unrestricted if None, and forbidden if the Vec is empty. + /// This is always None if running with a version of Cargo older than 1.39. + pub fn publish( &self ) -> Option< &Vec< String > > + { + self.inner.publish.as_ref() + } + + ///Contents of the free form package.metadata section. + /// This contents can be serialized to a struct using serde: + /// ``` rust + /// use serde::Deserialize; + /// use serde_json::json; + /// + /// #[ derive( Debug, Deserialize ) ] + /// struct SomePackageMetadata + /// { + /// some_value : i32, + /// } + /// + /// fn main() + /// { + /// let value = json! + /// ({ + /// "some_value" : 42, + /// }); + /// + /// let package_metadata : SomePackageMetadata = serde_json::from_value( value ).unwrap(); + /// assert_eq!( package_metadata.some_value, 42 ); + /// } + /// ``` + pub fn metadata( &self ) -> &Value + { + &self.inner.metadata + } + + /// The repository URL as specified in the Cargo.toml + pub fn repository( &self ) -> Option< &String > + { + self.inner.repository.as_ref() + } + + /// Features provided by the crate, mapped to the features required by that feature. + pub fn features( &self ) -> &BTreeMap< String, Vec< String > > + { + &self.inner.features + } + + } + /// Stores information about current workspace. #[ derive( Debug, Clone ) ] pub struct Workspace @@ -31,9 +129,10 @@ mod private pub fn from_current_path() -> Result< Self > { let current_path = AbsolutePath::try_from( std::env::current_dir().unwrap_or_default() )?; + let metadata = MetadataCommand::new().no_deps().exec().context("fail to load CargoMetadata")?; Ok( Self { - metadata : Some( MetadataCommand::new().no_deps().exec().context("fail to load CargoMetadata")? ), + metadata : Some( metadata ), manifest_dir : CrateDir::try_from( current_path )?, }) } @@ -45,8 +144,8 @@ mod private ( Self { - metadata : Some( MetadataCommand::new().current_dir( crate_dir.as_ref() ).no_deps().exec().context( "fail to load CargoMetadata" )? ), - manifest_dir : crate_dir, + metadata : Some( MetadataCommand::new().current_dir( crate_dir.as_ref() ).no_deps().exec().context( "fail to load CargoMetadata" )? ), + manifest_dir : crate_dir, } ) } @@ -58,7 +157,6 @@ mod private { let path = value.workspace_root.as_std_path().parent().unwrap().to_path_buf(); let path = AbsolutePath::try_from( path ).unwrap(); - Self { metadata : Some( value ), @@ -96,15 +194,17 @@ mod private impl Workspace { /// Returns list of all packages - pub fn packages( &self ) -> Result< &[ Package ], WorkspaceError > + pub fn packages( &self ) -> Result< Vec< WorkspacePackage >, WorkspaceError > { self .metadata .as_ref() .ok_or_else( || WorkspaceError::MetadataError ) - .map( | metadata | metadata.packages.as_slice() ) + .map( | metadata | metadata.packages.clone() ) + .map( | p | p.into_iter().map( WorkspacePackage::from ).collect() ) } + /// Returns the path to workspace root pub fn workspace_root( &self ) -> Result< &Path, WorkspaceError > { @@ -142,7 +242,7 @@ mod private } /// Find a package by its manifest file path - pub fn package_find_by_manifest< P >( &self, manifest_path : P ) -> Option< &Package > + pub fn package_find_by_manifest< P >( &self, manifest_path : P ) -> Option< WorkspacePackage > where P : AsRef< Path >, { @@ -154,7 +254,8 @@ mod private | packages | packages .iter() - .find( | &p | p.manifest_path.as_std_path() == manifest_path.as_ref() ) + .find( | &p | p.manifest_path().as_std_path() == manifest_path.as_ref() ) + .cloned() ) } @@ -162,11 +263,11 @@ mod private pub( crate ) fn graph( &self ) -> Graph< String, String > { let packages = self.packages().unwrap(); - let module_package_filter : Option< Box< dyn Fn( &cargo_metadata::Package ) -> bool > > = Some + let module_package_filter : Option< Box< dyn Fn( &WorkspacePackage ) -> bool > > = Some ( - Box::new( move | p | p.publish.is_none() ) + Box::new( move | p | p.publish().is_none() ) ); - let module_dependency_filter : Option< Box< dyn Fn( &cargo_metadata::Package, &cargo_metadata::Dependency) -> bool > > = Some + let module_dependency_filter : Option< Box< dyn Fn( &WorkspacePackage, &cargo_metadata::Dependency) -> bool > > = Some ( Box::new ( @@ -175,7 +276,7 @@ mod private ); let module_packages_map = packages::filter ( - packages, + packages.as_slice(), packages::FilterMapOptions { package_filter : module_package_filter, dependency_filter : module_dependency_filter }, ); @@ -190,4 +291,5 @@ crate::mod_interface! { exposed use Workspace; orphan use WorkspaceError; + protected use WorkspacePackage; } diff --git a/module/move/willbe/tests/inc/action/readme_health_table_renew.rs b/module/move/willbe/tests/inc/action/readme_health_table_renew.rs index 25e91cc194..48ea08fae2 100644 --- a/module/move/willbe/tests/inc/action/readme_health_table_renew.rs +++ b/module/move/willbe/tests/inc/action/readme_health_table_renew.rs @@ -146,6 +146,7 @@ fn stability_cell() let mut actual = String::new(); _ = file.read_to_string( &mut actual ).unwrap(); + dbg!( &actual ); assert!( actual.contains( "[![stability-deprecated](https://img.shields.io/badge/stability-deprecated-red.svg)](https://github.com/emersion/stability-badges#deprecated)" ) ); } diff --git a/module/move/willbe/tests/inc/entity/features.rs b/module/move/willbe/tests/inc/entity/features.rs index aafd9414b8..555f2b608a 100644 --- a/module/move/willbe/tests/inc/entity/features.rs +++ b/module/move/willbe/tests/inc/entity/features.rs @@ -6,9 +6,10 @@ use the_module::features::features_powerset; use std::collections::HashMap; use cargo_metadata::Package; use serde::Deserialize; +use the_module::workspace::WorkspacePackage; /// Constructs a mock `Package` with specified features for testing. -fn mock_package( features : Vec< ( &str, Vec< &str > ) > ) -> Package +fn mock_package( features : Vec< ( &str, Vec< &str > ) > ) -> WorkspacePackage { let mut features_map : HashMap< String, Vec< _ > > = HashMap::new(); for ( feature, deps ) in features @@ -33,7 +34,7 @@ fn mock_package( features : Vec< ( &str, Vec< &str > ) > ) -> Package } ); - Package::deserialize( json ).unwrap() + Package::deserialize( json ).unwrap().into() } #[ test ] diff --git a/module/move/wplot/Readme.md b/module/move/wplot/Readme.md index 87b425e43f..736c33de46 100644 --- a/module/move/wplot/Readme.md +++ b/module/move/wplot/Readme.md @@ -3,6 +3,7 @@ # Module :: wplot [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_wplot_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_wplot_push.yml)[![docs.rs](https://img.shields.io/docsrs/wplot?color=e3e8f0&logo=docs.rs)](https://docs.rs/wplot)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Fwplot_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20wplot_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) Plot interface. diff --git a/module/test/a/Readme.md b/module/test/a/Readme.md index 2caba754ad..4e217e53a9 100644 --- a/module/test/a/Readme.md +++ b/module/test/a/Readme.md @@ -1,3 +1,4 @@ [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_test_experimental_a_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_test_experimental_a_push.yml)[![docs.rs](https://img.shields.io/docsrs/test_experimental_a?color=e3e8f0&logo=docs.rs)](https://docs.rs/test_experimental_a)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ftest_experimental_a_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20test_experimental_a_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) diff --git a/module/test/b/Readme.md b/module/test/b/Readme.md index c65f9cbcf5..d06086c433 100644 --- a/module/test/b/Readme.md +++ b/module/test/b/Readme.md @@ -1,3 +1,4 @@ [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_test_experimental_b_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_test_experimental_b_push.yml)[![docs.rs](https://img.shields.io/docsrs/test_experimental_b?color=e3e8f0&logo=docs.rs)](https://docs.rs/test_experimental_b)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ftest_experimental_b_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20test_experimental_b_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY) diff --git a/module/test/c/Readme.md b/module/test/c/Readme.md index 7318b6c83f..547b2cd045 100644 --- a/module/test/c/Readme.md +++ b/module/test/c/Readme.md @@ -1,3 +1,4 @@ [![experimental](https://raster.shields.io/static/v1?label=&message=experimental&color=orange)](https://github.com/emersion/stability-badges#experimental)[![rust-status](https://github.com/Wandalen/wTools/actions/workflows/module_test_experimental_c_push.yml/badge.svg)](https://github.com/Wandalen/wTools/actions/workflows/module_test_experimental_c_push.yml)[![docs.rs](https://img.shields.io/docsrs/test_experimental_c?color=e3e8f0&logo=docs.rs)](https://docs.rs/test_experimental_c)[![Open in Gitpod](https://raster.shields.io/static/v1?label=try&message=online&color=eee&logo=gitpod&logoColor=eee)](https://gitpod.io/#RUN_PATH=.,SAMPLE_FILE=sample%2Frust%2Ftest_experimental_c_trivial%2Fsrc%2Fmain.rs,RUN_POSTFIX=--example%20test_experimental_c_trivial/https://github.com/Wandalen/wTools) +[![discord](https://img.shields.io/discord/872391416519737405?color=eee&logo=discord&logoColor=eee&label=ask)](https://discord.gg/m3YfbXpUUY)