Using a `new` constructor with Parameters.jl `@with_kw`

julia> using Parameters

julia> struct Cat
           breed
           colour
           age
           weight
           name
       end

julia> @with_kw struct Pet
           name
           kind
           age
       end
Pet

julia> Pet(c::Cat) = Pet(name=c.name, kind=typeof(c), age=c.age)
Pet

julia> c = Cat("None", "Black", 5, 5.0, "John")
Cat("None", "Black", 5, 5.0, "John")

julia> Pet(c)
Pet
  name: String "John"
  kind: Cat <: Any
  age: Int64 5


You only need inner constructors if you want a Pet(a,b,c) constructor, which may be ambiguous with the default constructor.