Pointers of Float to be used in MPI?

The following is a MWE that fails:

using MPI

MPI.Init()

mutable struct Foo
    bar::Float64
end
rank = MPI.Comm_rank(MPI.COMM_WORLD)
foo = Foo(rank)

println("$(rank)\t$(foo.bar)")
if rank == 0
    MPI.API.MPI_Recv(Ref(foo.bar), 1, MPI.Datatype(Float64), 1, 11, MPI.COMM_WORLD, MPI.API.MPI_STATUS_IGNORE[])
else
    MPI.API.MPI_Send(Ref(foo.bar), 1, MPI.Datatype(Float64), 0, 11, MPI.COMM_WORLD)
end
println("$(rank)\t$(foo.bar)")

MPI.Finalize()

This will not transfer the data, and changing Ref to pointer results in an error.
In my actual user case, each process will contain a bunch of different structs, and the number may furthur increase with the development of new algorithms. The data transfer among processes is the same for any struct, so I prefer to write an overall function to control the process, and define a my_mpi_recv! as well as a my_mpi_send function for each struct. Note that only part of each struct need to be transfered. In my case there is at least one complex struct with many fields, yet only one Float need to be transferred.
I’m awared that there is a not-so-hard solution: using RefValue. It is just like this:

using MPI

MPI.Init()

mutable struct Foo
    bar::Base.RefValue{Float64}
end

rank = MPI.Comm_rank(MPI.COMM_WORLD)
foo = Foo(Ref(0.0))
foo.bar[] = rank

println("$(rank)\t$(foo.bar[])")
if rank == 0
    MPI.API.MPI_Recv(foo.bar, 1, MPI.Datatype(Float64), 1, 11, MPI.COMM_WORLD, MPI.API.MPI_STATUS_IGNORE[])
else
    MPI.API.MPI_Send(foo.bar, 1, MPI.Datatype(Float64), 0, 11, MPI.COMM_WORLD)
end
println("$(rank)\t$(foo.bar[])")

MPI.Finalize()

It works, but then I have to use foo.bar[] instead of foo.bar everywhere. It will be much more convenient if I can just send and receive it correctly without changing the field type. Any possibilities in current Julia?

Btw, and off the topic, it may be strange to use Base.RefValue, but according to this thread, using Ref directly may have problems. Thanks god, though RefValue is not made public for whatever reason that seems peculiar and I can do nothing with, at least I can use it with prefix like Base.RefValue.
One more line for possible questions. The struct in the code is simple, but I have stated it clearly that the actual struct is complex with many fields, although only one float need to be transferred. Thus, the struct is used in many heavy calculations, and neither can I afford it to be type-unstable, nor can I split it into different many little different structures without changing my code everywhere. Besides, I definetly don’t want to use some solutions proposed in the above thread. This struct will be a part of some other structs, and the hierarchy goes up. To parametrize all structs along the way simply to enable a MPI send/recv seems to be an idea too stupid for me.