subroutine get_string_array(this, path, array)
use fson_value_m, only: fson_value_count, fson_value_get, fson_value, &
TYPE_ARRAY
use fson_string_m, only: fson_string_copy
implicit none
type(fson_value), pointer :: this, p, element
character(len=*), optional :: path
integer :: index, count
character(len=*), dimension(:) :: array
nullify(p)
! resolve the path to the value
if (present(path)) then
call get_by_path(this=this, path=path, p=p)
else
p => this
end if
if (.not.associated(p)) then
print *, "Unable to resolve path: ", path
call exit(1)
end if
if (p % value_type == TYPE_ARRAY) then
count = fson_value_count(p)
do index = 1, count
element => fson_value_get(p, index)
call fson_string_copy(element%value_string, array(index))
end do
else
print *, "Resolved value is not an array. ", path
call exit(1)
end if
end subroutine get_string_array