Кажись у меня получилось сделать статическую замену типа! Но есть 2 "но":
1. Приходится инжектить не только типы, но и некий фантомный крейт. Это нужно потому, что пользователь библиотеки может захотеть заинжектить в библиотеку тип, который в ней нигде не объявлен. Поэтому он может инжектить только те типы, которые объявлены в специальном фантомном крейте, который он подменяет для либы. Довольно костыльно, но не очень сложно и нормально работает, даже более-менее удобно, если класть фантомный крейт в папочку проекта.
2. Приходится передавать через env var путь к конфигу с описанием инжекции. Это самое неприятное: сейчас нет никакой возможности в процедурном макросе получить путь к корню проекта, для которого собирается билд, а не к корню крейта, в котором используется макрос. И нет возможности даже как-то через Cargo.toml подсунуть произвольную env var с нужной инфой, так что приходится устанавливать переменную перед вызовом команды сборки.