We've talked about doing something like this. You will need a way to store the endpoint weight in the ServerAddress, but we don't want to add a top-level field for this. Instead, I've thrown together
https://github.com/grpc/grpc/pull/23716 to give you a mechanism to do this.
Also, note that neither the C-core LB policy API nor the XdsClient API are currently public APIs, which means that you'll probably need to contribute this new LB policy to gRPC instead of maintaining it separately. And since this is functionality that will probably also be desired in Java and Go, I suggest writing a
gRFC for how this will work, so that anyone who implements it in those languages later will be able to build a compatible implementation.
If you'd like to talk further about how this needs to work, please let me know. Good luck!